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ファイルが作成または作成されていないことに注意してください。
私には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.py
はprog=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-stop-daemon --start --quiet --chuid $ CHUID --pidfile $ PIDFILE --exec $ DAEMON-$ DAEMON_ARGS
私の人生では、なぜstart-stop-daemonが機能しないのか理解できませんでした... Debian 7.6 wheezyを実行していて、機能が無効になっているとしか想定できません。
/ dev/nullと&とvoilaを使用するように変更します-sciprtが起動し、期待どおりに動作し続けます... mysqlからコードを盗みました:
$prog > /dev/null 2>&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