我在ubuntu 12.04上使用Supervisor(3.0a12)来管理php gearman worker。有时,工人陷入一种奇怪的状态,他们使用大量的cpu和ram。虽然我正在解决这个问题,但我认为让Supervisor偶尔会自动杀死并刷新工作人员会很好。我查看了http://supervisord.org/configuration.html配置文档,似乎没有看到任何允许这样做的选项。
有没有人知道是否有可能让supervisord定期重启它所管理的所有进程?
答案 0 :(得分:22)
您可以使用crontab将命令直接传递给supervisorctl。例如,以下内容将每20分钟重新启动一个进程。
0,20,40 * * * * /path/to/supervisorctl restart [supervisor_process]
答案 1 :(得分:20)
superlance
package为主管提供memmon
plugin。 memmon
监视主管控制下的程序的内存使用情况。
您将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