start-stop-daemon이 내 Python 스크립트를 서비스로 시작하지 않습니다.

start-stop-daemon이 내 Python 스크립트를 서비스로 시작하지 않습니다.

내 Debian 컴퓨터에서 Google AppEngine을 실행하려고 하는데 다음과 같은 파일을 만들었습니다 init.d/gae.

. /lib/lsb/init-functions

#
# Initialize variables
#

name=gae
user=$name

pid=/var/run/$name.pid
prog="python /opt/google_appengine/dev_appserver.py --host=0.0.0.0 --admin_host=0.0.0.0 --php_executable_path=/usr/bin/php-cgi /var/www"


case "${1}" in
   start)
      echo "Starting...Google App Engine"
      start-stop-daemon --start --make-pidfile --background --oknodo --user "$user" --name "$name" --pidfile "$pid" --startas "$prog" 

      ;;

   stop)
      echo "Stopping...Google App Engine"

      ;;

   restart)
      ${0} stop
      sleep 1
      ${0} start
      ;;

   *)
      echo "Usage: ${0} {start|stop|restart}"
      exit 1
      ;;
esac

exit 0

# End scriptname

스크립트를 수동으로 호출하여 테스트하고 있는데 스크립트가 실행되지만 데몬으로 실행되지 않거나 적어도 터미널에서 분리되지 않습니다. 나는 Apache와 유사한 기능을 기대하거나 찾고 있습니다.

나에게 어떤 스위치가 없나요?


편집하다

스위치가 PID 파일을 생성해야 한다고 표시하더라도 파일이 작성되거나 생성되지 않는다는 점에 유의해야 합니다.

답변1

두 가지 질문이 있는 것으로 보입니다.

prog=python /opt/google_appengine/dev_appserver.py --host=0.0.0.0 --admin_host=0.0.0.0 --php_executable_path=/usr/bin/php-cgi /var/www

/opt/google_appengine/dev_appserver.pyprog=python환경부터 시작 하겠습니다 . 이것은 start블록 이전이므로 start-stop-daemon관련되지도 않습니다.

빠른 수정은 다음과 같이 전체 작업을 참조하는 것입니다.

prog='python /opt/google_appengine/dev_appserver.py --host=0.0.0.0 --admin_host=0.0.0.0 --php_executable_path=/usr/bin/php-cgi /var/www'

하지만 더 나은 해결책은 스타일을 사용한 /etc/init.d/skeleton다음 실행하는 것 입니다.

DAEMON='python /opt/google/appengine/dev_appserver.py'
DAEMON_ARGS='--host=0.0.0.0 --admin_host=0.0.0.0 --php_executable_path=/usr/bin/php-cgi /var/www'

두 번째 문제는 인용을 잘못했다는 것입니다 $prog.

시작-중지-데몬 --start --make-pidfile --Background --oknodo --user "$user" --name "$name" --pidfile "$pid" --startas "$prog"

start-stop-daemon라는 프로그램을 시작하라고 지시합니다 python /opt/google_appengine/dev_appserver.py --host=0.0.0.0 --admin_host=0.0.0.0 --php_executable_path=/usr/bin/php-cgi /var/www.

하지만 그런 절차는 없는 것 같습니다. python논쟁으로 시작하고 싶습니다 . 큰따옴표를 제거하는 것은 빠른 수정이지만 더 좋은 방법 /etc/init.d/skeleton은 다음과 같습니다.

시작 - 데몬 프로세스 중지 --start --quiet --chuid $CHUID --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS

답변2

나는 평생 동안 start-stop-daemon이 작동하지 않는 이유를 알 수 없습니다. 나는 Debian 7.6을 wheezy로 실행하고 있으며 이 기능이 비활성화되어 있다고 가정할 수 있습니다.

/dev/null 및 & 및 voila를 사용하도록 변경했습니다. scipt가 시작되고 예상대로 계속 실행되었습니다... mysql에서 코드를 훔쳤습니다.

$prog > /dev/null 2>&1 &

누군가 이 접근 방식이 작동하고 원래 솔루션이 작동하지 않는 이유를 설명할 수 있다면 매우 흥미로울 것입니다... 어쨌든, 저는 제 경험을 공유하고 싶다고 생각했습니다.

  1. 다른 사람들이 해결책을 찾는 데 어려움을 겪지 않도록 하세요.
  2. 누군가가 나서서 내가 원래 생각했던 대로 작동하도록 하는 방법을 설명하도록 요청합니다. :)

편집 | 지금 관심 있는 두 줄은 다음과 같습니다.

prog='/usr/bin/python /opt/google_appengine/dev_appserver.py --host=0.0.0.0 --admin_host=0.0.0.0 --php_executable_path=/usr/bin/php-cgi /var/www'

start-stop-daemon --start --make-pidfile --background --oknodo --user $user --name $name --pidfile $pid --exec $prog

관련 정보