サーバー起動時のUpstartスクリプトの実行に関する問題

サーバー起動時のUpstartスクリプトの実行に関する問題

次のコードを使用する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]

関連情報