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


107

我正在使用有监督的,名为process1,process2,...,process8的几个进程运行。如果我想重新启动进程{1-4},该如何使用supervisorctl来完成?

Answers:


177

主管支持过程组。您可以将进程分为命名组并进行统一管理。

[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

47
在向流程组发出命令时发现需要在冒号后面加一个冒号是多么不平凡的事,真是令人惊讶。谢谢。
羊膜病

4
同意 我认为supervisorctl restart foo:*事情变得更清楚了。
汤姆(Tom)

因此,要直接回答OP的问题,您不能直接重新启动特定过程。您只能重新启动组,这需要组标签吗?
塞林

@Cerin通过我自己的测试,我得出了完全相同的结论。有趣的是,我倾向于在包含所有进程的.conf文件末尾看到一个组。反复观察,这没有任何意义。现在完全有意义了:)
AlanSE '17

你让我的一天:)
萨米特

3

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

supervisorctl restart process{1..4}

通过外壳扩展为

supervisorctl restart process1 process2 process3 process4

就像您已经明确键入一样。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.