나는 또 다른 시작 스크립트 질문을 할 만큼 오랫동안 이 문제로 어려움을 겪었습니다.
비교적 간단한 시작 스크립트가 있습니다.
### BEGIN INIT INFO
# Provides: startVNC
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Start VNC server at boot time
# Description: Test
### END INIT INFO
#!/bin/sh
echo "JOB RUN AT $(date)"
echo "============================"
echo ""
/usr/bin/vncserver -geometry 1280x1024 -depth 24
분명히 마지막 줄만 정말 중요합니다. 스크립트는 실행 가능합니다.
ls -l startVNC
생산하다:
-rwxr-xr-x 1 root root 406 2011-12-07 15:45 startVNC
vncserver가 시작될 때 ssh를 통해 로그인하고 실행하면 my_user
데스크탑에서 GUI를 볼 수 있습니다. 그런 다음 부팅 시 실행되도록 5가지를 시도했습니다.
- 내 스크립트를 에 복사하고
/etc/init.d/
호출합니다update-rc.d -f startVNC defaults
(또한99
after를 사용하여 해당 스크립트가 의존하는 모든 것이 이미 실행 중인지defaults
확인합니다 ).vncserver
폴더에 생성된 모든 심볼릭 링크를 확인했습니다/etc/rcX.d/
. 하지만 재부팅하거나 시작할 때 작동하지 않습니다. /etc/rc.local
전에 내 스크립트를 추가하세요 .exit 0
crontab -e
다음과 같이 추가됨@reboot /home/my_user/scripts/startVNC
- 내 스크립트를 다음에 추가하세요.
/etc/init.d/rcS
- 시스템->기본 설정->Gnome의 응용 프로그램 시작에 내 스크립트를 추가했습니다.
그러나 그들 중 누구도 작동하지 않습니다. 또 무엇을 확인할 수 있나요? 내 스크립트에 문제가 있는 것이 아닐까요? 프로세스가 작동하려면 프로세스의 소유자여야 한다고 생각 my_user
하지만 디버깅하는 방법을 모르겠습니다.
어떤 단서도 감사합니다.
답변1
당신이 사용할 수있는su
[귀하의 사용자 이름]-c /usr/bin/vncserver
루트 대신 사용자로 vncserver를 실행하십시오.
또 다른 요점: 스크립트에서는 VNC 서버 시작과 중지 사이에 차이가 없습니다. 일반적으로 init 스크립트는 다양한 사례를 사용하여 서비스를 시작/중지합니다.
case "$1" in
start)
# code to start the application
;;
stop)
# code to stop the application
;;
restart)
$0 stop
$0 start
;;
esac
여기다음은 init 스크립트를 사용하여 vnc 서버를 시작하는 방법에 대한 자세한 예입니다.
답변2
알았어, 알겠어. 문제는 다음과 같습니다
- 일반적으로 일어나는 일은 내 스크립트를 루트로 실행하면 작동하지 않는다는 것입니다. 그렇기 때문에 꼭 사용해야 하는
su [my_user] -c
옵션은 인용되어야 합니다.
su my_user -c "/usr/bin/vncserver -geometry1280x1024 -깊이16"
나는 또한 덧붙였습니다
. /lib/lsb/init-functions
.exit 0
이것이 필요한지는 모르겠지만 어떤 해를 끼치지는 않을 것이라고 확신합니다. 제공된 자세한 예제에서 복사했습니다.토후와워후.
그래서 나는 다음과 같이 끝납니다.
### BEGIN INIT INFO
# Provides: startVNC
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Start VNC server at boot time
# Description: A sophisticated script to do the job.
### END INIT INFO
#!/bin/sh
echo "JOB RUN AT $(date)"
echo "============================"
echo ""
. /lib/lsb/init-functions
su my_user -c "/usr/bin/vncserver -geometry 1280x1024 -depth 16"
exit 0
좋은 결과. 물론, 위에서 인용한 내용을 사용하면잘 디자인된 스크립트더 좋을 수도 있습니다. 다음을 통해 시작에 스크립트를 추가했습니다.
sudo update-rc.d -f startVNC start 99 2 3 4 5 .
종료 시 아무것도 실행할 이유가 없기 때문입니다(내가 수행하지 않는 로깅 제외).
내 원래 질문에서 shebang(#!으로 시작하는 줄)이 잘못 배치되었다는 설명도 참조하세요. 하지만 작동하기 때문에 여기에 테스트되지 않은 코드를 포함하고 싶지 않습니다. 사용하고 싶다면 바꿔야 할 것 같습니다.