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

2つの質問があるようです。

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'

2番目の問題は、引用が間違っていることです$prog

start-stop-daemon --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. 誰かが出てきて、私が元々考えたように機能する方法を説明するように頼みます。 :)

編集|今興味のある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

関連情報