/home/jack/myscript.sh
내가 실행하고 싶은 스크립트는 다음과 같습니다.
export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.26/
/home/jack/myapp/apache-tomcat-6.0.32/bin/./catalina.sh run
/etc/init/myapp.conf
내가 작성한 신생 문서:
description "Myapp Server"
start on runlevel [2345]
stop on runlevel [06]
respawn
respawn limit 10 5
exec `su jack -c /home/jack/myscript.sh`
그렇다면 사용자로 스크립트를 실행하려는 경우 jack
위의 구성이 작동합니까 ? 더 좋은 방법이 있나요?
답변1
~에 따르면누보 리치 요리법, 다양한 사용자로 서비스를 실행하는 내장 기능이 계획되었지만 아직 구현되지 않았습니다.
사용 가능한 경우 start-stop-daemon
사용하십시오.
exec start-stop-daemon --start -u jack --exec /home/jack/myscript.sh
그렇지 않은 경우에는 (오류가 발생하지 않는 한) 항상 지정된 사용자로 전환하고 자체 정책(특히 대부분의 시스템에서 PAM 정책)을 준수하는 su
또는 를 사용하십시오 sudo
.start-stop-daemon
su
sudo
귀하의 경우에는 중간 스크립트가 필요하지 않습니다. Upstart 서비스 정의에서 직접 환경 변수를 설정할 수 있습니다.
description "Myapp Server"
start on runlevel [2345]
stop on runlevel [06]
respawn
respawn limit 10 5
env JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.26/
exec /home/jack/myapp/apache-tomcat-6.0.32/bin/catalina.sh run
답변2
Upstart 1.4부터 Upstart에는 setuid
및 스탠자를 사용하여 setgid
지정된 사용자로 시스템 작업을 실행할 수 있는 기능이 있습니다. 예를 들면 다음과 같습니다.
setuid username
setgid groupname
이전 버전에서는 다음을 사용할 수 있었습니다.사용자 위치, 사용자의 홈 폴더에 저장됩니다.
또는 exec 명령에서 일부 응용 프로그램을 사용하십시오.
가능한 경우 start-stop-daemon
:
exec start-stop-daemon --start -c myuser --exec command
그리고 sudo
:
exec sudo -u myuser command
그리고 su
:
exec su -s /bin/sh -c 'exec "$0" "$@"' myuser -- command [parameters...]
추가 정보여기
답변3
세션 사용자로 실행하려면세션 할당(1.7부터) 시스템 작업 대신. 이러한 작업은 환경 변수와 관련하여 시스템 작업과 같이 제한되지 않으며 세션 사용자로 실행됩니다.