私は Ubuntu 14.04 を実行しています。起動時に実行するように設定されたサービスがいくつかあり、そのうちの 1 つが supervisor です。実行レベル 2 で起動するので、/etc/rc2.d/
起動時にすべてのサービスが開始されるはずです。
/etc/rc2.d/S20supervisor
/etc/init.d/supervisor
は、想定どおりに でスーパーバイザ起動スクリプトを実行します。スクリプトが で実行されるのがわかります/var/log/boot.log
。その後に実行されるはずのすべてのスクリプトは実行されません。スーパーバイザ スクリプトが Upstart を「クラッシュ」させるかのようです。
S20supervisor
に編集するとS10supervisor
、スーパーバイザーが最初に実行され、それ以外は何も実行されません。その後、スーパーバイザーは正常に実行されます。
S20supervisor
に編集するとs99supervisor
、スーパーバイザーが最後に実行され、他のすべてが実行されます。その後、スーパーバイザーは正常に実行されます。
サービスは問題なく起動しているように見えますが、何らかの理由で Upstart がロックし、スーパーバイザー スクリプトの後のスクリプトが実行されません。なぜでしょうか?
sudo service supervisor start
ちなみに、次の出力ではありますが、問題なく Supervisor を手動で起動できます。
$ sudo service supervisor start Starting supervisor: 2017-05-20 00:14:04,435 CRIT Supervisor running as root (no user in config file) 2017-05-20 00:14:04,435 WARN Included extra file "/etc/supervisor/conf.d/graphite.conf" during parsing 2017-05-20 00:14:04,450 INFO RPC interface 'supervisor' initialized 2017-05-20 00:14:04,450 CRIT Server 'unix_http_server' running without any HTTP authentication checking 2017-05-20 00:14:04,450 INFO supervisord started with pid 4462 2017-05-20 00:14:05,455 INFO spawned: 'statsd' with pid 4465 2017-05-20 00:14:05,458 INFO spawned: 'carbon-cache' with pid 4466 2017-05-20 00:14:05,464 INFO spawned: 'graphite-webapp' with pid 4467 2017-05-20 00:14:06,635 INFO success: statsd entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2017-05-20 00:14:06,635 INFO success: carbon-cache entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2017-05-20 00:14:06,635 INFO success: graphite-webapp entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
答え1
Supervisor はバックグラウンドではなくフォアグラウンドで実行されているため、Upstart スクリプトはクラッシュしません。Supervisor がスレッドの制御を維持しているため、スクリプトがハングします。
解決策としては、起動後にスーパーバイザーをバックグラウンドに移動させることですが、実際に修正を実行したら詳細を投稿します。