我正在使用Supervisor (3.0a12)在Ubuntu 12.04上管理php gearman工作者。有时候工作者会陷入一种奇怪的状态,耗费大量CPU和RAM。当我解决这个问题时,我觉得让Supervisor定期自动杀死和刷新工作者会很不错。我查看了配置文档,但似乎没有找到任何允许这样做的选项。
请问是否有人知道如何让supervisord定期重新启动所有进程?
我正在使用Supervisor (3.0a12)在Ubuntu 12.04上管理php gearman工作者。有时候工作者会陷入一种奇怪的状态,耗费大量CPU和RAM。当我解决这个问题时,我觉得让Supervisor定期自动杀死和刷新工作者会很不错。我查看了配置文档,但似乎没有找到任何允许这样做的选项。
请问是否有人知道如何让supervisord定期重新启动所有进程?
您可以使用crontab直接向supervisorctl传递命令。例如,以下命令将每20分钟重新启动一个进程。
0,20,40 * * * * /path/to/supervisorctl restart [supervisor_process]
superlance
包 提供了一个针对 supervisor 的 memmon
插件。 memmon
可以监控受 supervisor 控制的程序的内存使用情况。
可以将 memmon
配置为 supervisor 的事件监听器:
[eventlistener:memmon]
command=memmon -a 200MB
events=TICK_60
以上配置将 memmon 设置为监控受 supervisor 控制的 任何 程序,如果其内存使用超过 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