web-dev-qa-db-ja.com

監視対象の子プロセスを定期的に再起動する

私は、PHPギアマンワーカーを管理するためにubuntu 12.04でスーパーバイザー(3.0a12)を使用しています。時々、労働者は彼らが大量のCPUとRAMを使用する奇妙な状態に巻き込まれます。私がこの問題を理解している間、スーパーバイザーが時々ワーカーを自動的に殺してリフレッシュするのはいいことだと思いました。 http://supervisord.org/configuration.html 構成ドキュメントを調べましたが、これを可能にするオプションが表示されなかったようです。

監督者が管理するすべてのプロセスを定期的に再起動することが可能かどうか誰かが知っていますか?

26
dm03514

superlance package は、スーパーバイザーに memmonプラグイン を提供します。 memmonは、スーパーバイザーの制御下にあるプログラムのメモリ使用量を監視します。

memmonをスーパーバイザイベントリスナーとして設定します。

[eventlistener:memmon]
command=memmon -a 200MB
events=TICK_60

上記の構成では、メモリ使用量が200MBを超える場合、監視制御下でanyプログラムを再起動するようにmemmonを設定します。 60秒ごとにチェックします。

特定のプログラムまたはプログラムグループを監視するようにmemmonを構成し、それぞれに制限を設定できます。

22
Martijn Pieters

Crontabを使用して、コマンドを直接supervisorctlに渡すことができます。たとえば、次のようにすると、20分ごとにプロセスが再開されます。

0,20,40 * * * * /path/to/supervisorctl restart [supervisor_process]
24
scum

簡単なスーパーバイザーのみのソリューションがあります。適切な時間スリープしてから、必要なプロセスを再開する別のスーパーバイザープロセスを作成します。

[program:my_program]
process_name = python something.py

[program:periodicrestarter]
command = sh -c "echo 'restart my_program' | supervisorctl;sleep 600"
; restarts all:
;command = sh -c "echo 'restart all' | supervisorctl;sleep 600"
autorestart = true
1
connor