33

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

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

4

3 回答 3

34

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

0,20,40 * * * * /path/to/supervisorctl restart [supervisor_process]
于 2013-07-27T06:28:43.420 回答
28

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

您配置memmon为主管事件侦听器:

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

上面的配置设置 memmon如果内存使用量超过 200MB,则重新启动主管控制下的任何程序。它每 60 秒检查一次。

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

于 2012-09-24T19:39:47.977 回答
13

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

[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
于 2019-02-20T21:28:58.427 回答