부팅 시 자동 시작을 테스트하기 위해 그래픽 인터페이스로 부팅하는 샘플 스크립트를 만듭니다.

부팅 시 자동 시작을 테스트하기 위해 그래픽 인터페이스로 부팅하는 샘플 스크립트를 만듭니다.

저는 Linux Debian 서버(AWS EC2)에서 작업하고 있으며 그래픽 환경에서 실행해야 하는 소프트웨어를 가지고 있습니다.

수동으로 시작하면( ./program.sh디렉토리에 입력하여) 잘 작동합니다. vncviewer 창(원격으로 제어하는 ​​클라우드 서버)으로 전환하면 프로그램이 시작되는 것을 볼 수 있습니다. 이 $DISPLAY값은 시작 시 다음으로 설정됩니다.:1.0

program.sh그러나 시작 시 스크립트를 생성하여 프로그램을 실행 하려고 하면 init.d그래픽 환경에서 아무 일도 일어나지 않습니다.

프로그램 로그를 읽어보았지만 결정적인 내용을 찾을 수 없었습니다.

변수나 xhosts 권한에 문제가 있는 것 같은데 DISPLAY, 제가 실행 중인 소프트웨어가 약간 복잡하기 때문에(로그인 자격 증명 등) 문제를 찾는 데 어려움을 겪고 있습니다.

hello_world.sh그렇기 때문에 수동 시작 및 부팅 시작 시 어떤 일이 발생하는지 테스트하기 위해 그래픽 환경에서 간단한 창을 여는 간단한 " " 스크립트를 만드는 방법을 원했습니다 .

누구든지 나에게 그런 스크립트를 줄 수 있습니까? 그 기능은 기본적으로 다음과 같아야 합니다: ./hello_world.sh쉘 입력 -> 그래픽 환경에서 열려 있는 창 보기. 목적은 init.d 시작 스크립트를 생성할 경우 이 간단한 스크립트가 어떻게 작동하는지 테스트하는 것입니다.


현재 작동하지 않는 init.d 파일의 세부 정보는 다음과 같습니다.

#!/bin/sh
### BEGIN INIT INFO
# Provides:          IBController
# Required-Start:    $remote_fs $syslog +vncserver
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

dir="/opt/IBController"
cmd="./IBControllerGatewayStart.sh"
user="depot"

name=`basename $0`
pid_file="/var/run/$name.pid"
stdout_log="/var/log/$name.log"
stderr_log="/var/log/$name.err"

get_pid() {
    cat "$pid_file"
}

is_running() {
    [ -f "$pid_file" ] && ps -p `get_pid` > /dev/null 2>&1
}

case "$1" in
    start)
    if is_running; then
        echo "Already started"
    else
        echo "Starting $name"
        xhost local:depot
    export DISPLAY=:2.0
        cd "$dir"
        if [ -z "$user" ]; then
            sudo $cmd >> "$stdout_log" 2>> "$stderr_log" &
        else
            sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" &
        fi
        echo $! > "$pid_file"
        if ! is_running; then
            echo "Unable to start, see $stdout_log and $stderr_log"
            exit 1
        fi
    fi
    ;;
    stop)
    if is_running; then
        echo -n "Stopping $name.."
        kill `get_pid`
        for i in 1 2 3 4 5 6 7 8 9 10
        # for i in `seq 10`
        do
            if ! is_running; then
                break
            fi

            echo -n "."
            sleep 1
        done
        echo

        if is_running; then
            echo "Not stopped; may still be shutting down or shutdown may have failed"
            exit 1
        else
            echo "Stopped"
            if [ -f "$pid_file" ]; then
                rm "$pid_file"
            fi
        fi
    else
        echo "Not running"
    fi
    ;;
    restart)
    $0 stop
    if is_running; then
        echo "Unable to stop, will not attempt to start"
        exit 1
    fi
    $0 start
    ;;
    status)
    if is_running; then
        echo "Running"
    else
        echo "Stopped"
        exit 1
    fi
    ;;
    *)
    echo "Usage: $0 {start|stop|restart|status}"
    exit 1
    ;;
esac

exit 0

답변1

user로그인 후 데스크탑 환경이 로드됩니다. 그러면 실행 init.d이 안 되기 때문에 작동하지 않습니다 Xserver.

아래 해결 방법을 시도하기 전에 GUI가 로드되도록 Debian지정된 자동 로그인 도 구성해야 합니다.user

program.desktop이 디렉터리에 파일을 만듭니다 /home/$user/.config/autostart/. 디렉터리가 없으면 만듭니다.

프로그램.데스크탑

[Desktop Entry]
Type=Application
Exec=program.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=Porgram
Comment=Program Description

살펴볼 수 있는 몇 가지 관련 질문이 있습니다.

관련 정보