让Supervisord定期重启子进程

时间:2012-09-24 18:51:49

标签: php python gearman supervisord

我在ubuntu 12.04上使用Supervisor(3.0a12)来管理php gearman worker。有时,工人陷入一种奇怪的状态,他们使用大量的cpu和ram。虽然我正在解决这个问题,但我认为让Supervisor偶尔会自动杀死并刷新工作人员会很好。我查看了http://supervisord.org/configuration.html配置文档,似乎没有看到任何允许这样做的选项。

有没有人知道是否有可能让supervisord定期重启它所管理的所有进程?

3 个答案:

答案 0 :(得分:22)

您可以使用crontab将命令直接传递给supervisorctl。例如,以下内容将每20分钟重新启动一个进程。

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

答案 1 :(得分:20)

superlance package为主管提供memmon pluginmemmon监视主管控制下的程序的内存使用情况。

您将memmon配置为主管eventlistener:

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

如果超过200MB的内存使用量,上面的配置将memmon设置为在超级用户控制下重启任何程序。它每60秒检查一次。

您可以配置memmon来监控特定程序或程序组,为每个程序或程序组设置限制。

答案 2 :(得分:0)

有一个简单的仅限主管的解决方案。使另一个主管进程休眠适当的时间,然后重新启动所需的进程。

[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