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

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

【问题讨论】:

    标签: supervisord


    【解决方案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 process{1..4}
    

    shell扩展成

    supervisorctl restart process1 process2 process3 process4
    

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

    【讨论】:

      猜你喜欢
      • 2017-01-29
      • 2015-10-11
      • 2017-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      相关资源
      最近更新 更多