如何使用supervisorctl仅重新启动某些进程?

Posted

技术标签:

【中文标题】如何使用supervisorctl仅重新启动某些进程?【英文标题】:how to restart only certain processes using supervisorctl? 【发布时间】:2012-03-07 06:33:47 【问题描述】:

我正在使用 supervisord 运行几个进程,命名为 process1、process2、...、process8。如果我想重新启动进程1-4,我该如何使用 supervisorctl?

【问题讨论】:

【参考方案1】:

supervisord 支持process groups。您可以将进程分组到命名组并集中管理它们。

[unix_http_server]
file=%(here)s/supervisor.sock

[supervisord]
logfile=supervisord.log
pidfile=supervisord.pid

[program:cat1]
command=cat

[program:cat2]
command=cat

[program:cat3]
command=cat

[group:foo]
programs=cat1,cat3

[supervisorctl]
serverurl=unix://%(here)s/supervisor.sock

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

supervisorctl 命令可以用组名调用:

supervisorctl restart foo:

以及多个进程名称:

supervisorctl restart foo:cat1 cat2

【讨论】:

在向进程组发出命令时发现需要附加冒号是多么不平凡,这真是令人惊讶。谢谢。 同意。我认为supervisorctl restart foo:* 让正在发生的事情更加清晰。 所以直接回答OP的问题,不能直接重启特定进程。只能重启组,需要组标签? @Cerin 根据我自己的测试,我得出了完全相同的结论。说起轶事,我倾向于在包含所有进程的 .conf 文件末尾看到一组。作为反复观察,这没有任何意义。现在它完全有意义了:) 你成就了我的一天 :)【参考方案2】:

由于supervisorctl 在命令行上接受多个进程,您可以利用 shell 大括号扩展(例如在 Bash 中)来控制多个进程:

supervisorctl restart process1..4

shell扩展成

supervisorctl restart process1 process2 process3 process4

就好像你已经明确地输入了一样。

【讨论】:

以上是关于如何使用supervisorctl仅重新启动某些进程?的主要内容,如果未能解决你的问题,请参考以下文章

023_supervisorctl管理服务注意事项

supervisorctl 启动客户端时候遇到问题笔记

lnmp环境中的:supervisorctl

lnmp环境中的:supervisorctl

Linux 下 Supervisor 的运行及 supervisorctl 的使用

部署Django,supervisorctl异常终止