我在 ubuntu 12.04 上使用 Supervisor (3.0a12) 来管理 php gearman 工作人员。有时工人会陷入一种奇怪的状态,他们使用大量的 CPU 和内存。当我在解决这个问题时,我认为让 Supervisor 偶尔自动杀死和刷新工作人员会很好。我查看了http://supervisord.org/configuration.html配置文档,似乎没有看到任何允许这样做的选项。
有谁知道是否可以让 supervisord 定期重新启动它管理的所有进程?
我在 ubuntu 12.04 上使用 Supervisor (3.0a12) 来管理 php gearman 工作人员。有时工人会陷入一种奇怪的状态,他们使用大量的 CPU 和内存。当我在解决这个问题时,我认为让 Supervisor 偶尔自动杀死和刷新工作人员会很好。我查看了http://supervisord.org/configuration.html配置文档,似乎没有看到任何允许这样做的选项。
有谁知道是否可以让 supervisord 定期重新启动它管理的所有进程?
您可以使用 crontab 将命令直接传递给 supervisorctl。例如,以下将每 20 分钟重新启动一个进程。
0,20,40 * * * * /path/to/supervisorctl restart [supervisor_process]
该superlance
软件包为主管提供了一个memmon
插件。memmon
监视主管控制下的程序的内存使用情况。
您配置memmon
为主管事件侦听器:
[eventlistener:memmon]
command=memmon -a 200MB
events=TICK_60
上面的配置设置 memmon如果内存使用量超过 200MB,则重新启动主管控制下的任何程序。它每 60 秒检查一次。
您可以配置 memmon 以监视特定程序或程序组,并为每个程序设置限制。
有一个简单的仅限主管的解决方案。使另一个主管进程休眠适当的时间,然后重新启动您想要的进程。
[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