次のコードを使用するUpstartスクリプトがあります。
start on runlevel [2345]
stop on runlevel [!2345]
respawn
env PYTHONPATH=$PYTHONPATH:/opt/lrms/lib/python2.6/site-packages
exec python /opt/foo_service/src/foo/foo.py >> /var/log/foo.log 2>&1
pre-start script
echo "[`date`] - Starting Foo Service..." >> /var/log/foo.log
end script
pre-stop script
echo "[`date`] - Stopping Foo Service..." >> /var/log/foo.log
end script
post-stop script
echo "[`date`] - Post-Stop Stanza..." >> /var/log/foo.log
end script
start foo
またはを使用して簡単にサービスを開始および停止できますstop foo
。さて、サーバーを再起動してサービスの状態を確認してくださいstop/waiting
。
その後、ログを確認して次のことを確認しました(起動中にこの起動スクリプトで発生するイベントです)。
[Mon Aug 22 12:20:34 EDT 2016] - Starting Foo Service...
[Mon Aug 22 12:20:35 EDT 2016] - Post-Stop Stanza...
[Mon Aug 22 12:20:35 EDT 2016] - Starting Foo Service...
[Mon Aug 22 12:20:35 EDT 2016] - Post-Stop Stanza...
[Mon Aug 22 12:20:35 EDT 2016] - Starting Foo Service...
[Mon Aug 22 12:20:35 EDT 2016] - Post-Stop Stanza...
[Mon Aug 22 12:20:35 EDT 2016] - Starting Foo Service...
[Mon Aug 22 12:20:36 EDT 2016] - Post-Stop Stanza...
[Mon Aug 22 12:20:36 EDT 2016] - Starting Foo Service...
[Mon Aug 22 12:20:36 EDT 2016] - Post-Stop Stanza...
[Mon Aug 22 12:20:36 EDT 2016] - Starting Foo Service...
[Mon Aug 22 12:20:36 EDT 2016] - Post-Stop Stanza...
[Mon Aug 22 12:20:36 EDT 2016] - Starting Foo Service...
[Mon Aug 22 12:20:36 EDT 2016] - Post-Stop Stanza...
[Mon Aug 22 12:20:36 EDT 2016] - Starting Foo Service...
[Mon Aug 22 12:20:36 EDT 2016] - Post-Stop Stanza...
[Mon Aug 22 12:20:36 EDT 2016] - Starting Foo Service...
[Mon Aug 22 12:20:37 EDT 2016] - Post-Stop Stanza...
[Mon Aug 22 12:20:37 EDT 2016] - Starting Foo Service...
[Mon Aug 22 12:20:37 EDT 2016] - Post-Stop Stanza...
[Mon Aug 22 12:20:37 EDT 2016] - Starting Foo Service...
[Mon Aug 22 12:20:37 EDT 2016] - Post-Stop Stanza...
私にとって、これは停止前のセクションが実行されず、何度も再生成されることを考慮すると、upstartスクリプトがクラッシュしていることを意味します。
次の推測は、Pythonスクリプトは、upstartスクリプトの起動時に現在実行されていないものに依存できることです。 PythonサービスはActiveMQからイベントをキャプチャしてMySQLに保存します。 MySQLが準備されたときに実行するようにUpstartスクリプトを編集しようとしましたが、ログファイルには何も出力されません。
実行している他のサービスによっては、これがPythonサービスで問題になる可能性があると仮定するのは正しいですか?この問題をどのようにデバッグするのですか?
答え1
私は解決を調べた。私のPythonスクリプトはMySQLinitctl emit mysql-started
に依存しているので/etc/init.d/mysqld
。
start on started mysql-started
その後、私のスタートアップスクリプトで代わりに使用できますstart on runlevel [2345]
。