저는 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
살펴볼 수 있는 몇 가지 관련 질문이 있습니다.