web-dev-qa-db-ja.com

スーパーバイザで「致命的な状態に入った、再試行が多すぎて再試行が速すぎる」に対処する方法

私は単純なプログラム構成でスーパーバイザーをテストしています:

[program:test]
command=python -c "print 'hello'"
autostart=true                
autorestart=true
exitcodes=1
user=ratdon
stdout_logfile=/opt/log/test.log
stderr_logfile=/opt/log/test.log

Sudo supervisord -n -c /opt/supervisord.conf &。しかし、いくつかのスポーン後、再びスポーンするのをやめます。

2016-02-01 11:17:58,973 CRIT Supervisor running as root (no user in config file)
2016-02-01 11:17:58,973 WARN Included extra file "/opt/test.ini" during parsing
2016-02-01 11:17:58,994 INFO RPC interface 'supervisor' initialized
2016-02-01 11:17:58,994 CRIT Server 'inet_http_server' running without any HTTP authentication checking
2016-02-01 11:17:58,995 INFO supervisord started with pid 19644
2016-02-01 11:17:59,998 INFO spawned: 'test' with pid 19648
2016-02-01 11:18:00,026 INFO exited: test (exit status 0; not expected)
2016-02-01 11:18:01,030 INFO spawned: 'test' with pid 19650
2016-02-01 11:18:01,064 INFO exited: test (exit status 0; not expected)
2016-02-01 11:18:03,072 INFO spawned: 'test' with pid 19653
2016-02-01 11:18:03,104 INFO exited: test (exit status 0; not expected)
2016-02-01 11:18:06,108 INFO spawned: 'test' with pid 19657
2016-02-01 11:18:06,138 INFO exited: test (exit status 0; not expected)
2016-02-01 11:18:07,139 INFO gave up: test entered FATAL state, too many start retries too quickly

私は、supervisordを停止するまで、supervisorがプログラムを再起動し続けることを望みます。

出来ますか?はいの場合、それを行う方法は?

スーパーバイザにタイムスタンプ付きのstdoutを記録させるオプションはありますか、またはstdout自体にタイムスタンプを配置する必要がありますか?

4
RatDon

Dockerマイクロサービス環境で作業しているときに同じ使用例が発生しました。私の場合、動的に生成された構成が設定される前にNginxが起動した可能性がありました。

現在のところ、プロセスが正常に開始するまで、Supervisordにサービスを無限に再開させる方法はありません。

ただし、startretriesオプションを使用することで実現可能な回避策があります。 startretriesオプションを使用すると、Supervisordは指定された回数、またはプロセスが正常に開始されるまで再起動します。

私の特定の使用例では、競合状態の時間枠は1秒未満だったので、startretries=2で十分でした。ただし、必要に応じて、はるかに高い値に設定できます。

[program:test]
startretries=10
2
quat

実際にはより良い方法は、開始されたプログラムに優先順位を割り当てることです

[program:x]
priority=1
[program:y]
priority=2    

数字が小さいほど起動順序が高く、もちろん再試行の回数が多いことを示しています。

0
AbdAllah Hamdy