让Supervisord定期重启子进程

dm0*_*514 23 php python gearman supervisord

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

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

scu*_*cum 24

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

0,20,40 * * * * /path/to/supervisorctl restart [supervisor_process]
Run Code Online (Sandbox Code Playgroud)

  • 进程死亡的原因有很多:对于意外重启而言,强大是非常重要的.因此,如果这种策略会导致数据丢失,那就是一个错误,无论是否使用cron实现这一点都是正确的解决方案. (4认同)

Mar*_*ers 22

superlance软件包为主管提供了一个memmon插件.memmon监视主管控制下的程序的内存使用情况.

您配置memmon为主管eventlistener:

[eventlistener:memmon]
command=memmon -a 200MB
events=TICK_60
Run Code Online (Sandbox Code Playgroud)

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

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


Con*_*nor 12

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

[program:my_program]
process_name = python something.py

[program:periodicrestarter]
command = sh -c "echo 'restart my_program' | supervisorctl;sleep 600"
; restarts all (sleeps first because this restarts itself):
;command = sh -c "sleep 600; echo 'restart all' | supervisorctl"
autorestart = true
Run Code Online (Sandbox Code Playgroud)

  • 请注意,“全部重新启动”也会重新启动 perioderstarter 本身,因此可能无法按预期工作。 (2认同)
  • 另外,在容器上下文中没有 crontab 使用。 (2认同)