如何配置 supervisord 托管程序在尝试重新启动之前等待 X 秒?

loo*_*tro 9 worker-process supervisord

我有一个工作进程,它一次处理 1 条 RabbitMq 消息。现在,一旦 worker 退出,supervisord 就会重新启动它(它将处理下一条消息)。

我想设置一个 X 秒的间隔,这样 supervisord 就不会立即重新启动,但它会在启动另一个工人之前等待给定的时间。

这可能吗?如何?

Jak*_*sic 10

无法在主管程序部分指定间隔,但您可以做的是将“sleep()”放入您的代码中,以便程序在完成消息处理后等待指定的时间段。

如果您不想/不能更改程序代码,您可以尝试将其包装到 bash 脚本中,例如:

#!/bin/bash
/usr/local/bin/myprogram
sleep 30
Run Code Online (Sandbox Code Playgroud)

并更改您的主管程序部分以运行该脚本,而不是您的程序:

command=/usr/local/bin/myprogram.sh
Run Code Online (Sandbox Code Playgroud)


Luc*_*lli 8

我需要一种简单的方法来从没有 cron 的 docker 容器内部运行命令。这是我正在使用的:

[program:runevery]
directory = /my/workdir
command = sh -c "sleep 5;date >>/root/test.ts"
stdout_logfile = /var/log/supervisor/%(program_name)s.log
stderr_logfile = /var/log/supervisor/%(program_name)s.log
autorestart = true
startsecs = 0
exitcodes = 0,1,2
Run Code Online (Sandbox Code Playgroud)

startsecs = 0 确保主管认为命令已成功启动,即使它在几秒钟后退出。否则主管将停止重新启动它,认为它处于循环中。

以下是您将在 /root/date.ts 中看到的与上面的示例相同的内容:

# tail -f /root/test.ts 
Tue Nov 17 20:42:58 UTC 2015
Tue Nov 17 20:43:04 UTC 2015
Tue Nov 17 20:43:10 UTC 2015
[...]
Run Code Online (Sandbox Code Playgroud)

根据您的喜好调整睡眠并用您需要的任何内容替换“date >>/root/test.ts”。

如果您需要比每分钟更频繁地运行 cronjob,此解决方案也会派上用场。


qin*_*ang 6

[program:yourapp]
command = bash -c "sleep 60 && exec urcmd'
startsecs = 65 ; 
Run Code Online (Sandbox Code Playgroud)

进而

supervisorctl -c your_config_file reload
Run Code Online (Sandbox Code Playgroud)

1.您需要使用exec命令,否则它将派生一个子进度sleep 60 && exec your command,您的进度将如下所示

$ ps -ef|grep urcmd
work      1818  1698  0 17:35 ?        00:00:00 bash -c sleep 60 && urcmd
work      3872  1818  0 17:36 ?        00:00:00 urcmd
Run Code Online (Sandbox Code Playgroud)

然后当你使用supervisorctl停止 urApp 时,你将停止 1818 进度并留下 3872 一个孤立进度

2.建议将startsecs更改为比sleep秒多5秒,然后当您启动此应用程序并检查状态时,它会显示它正在启动

$supervisorctl -c your_config_file status;echo;ps -ef|grep urcmd
urapp                          STARTING  
otherapp                       RUNNING   pid 13502, uptime 0:00:55

$supervisorctl -c your_config_file status;echo;ps -ef|grep urcmd
urapp                          RUNNING   pid 13503, uptime 0:00:05
otherapp                       RUNNING   pid 13502, uptime 0:00:65
Run Code Online (Sandbox Code Playgroud)

否则,如果您设置的值小于睡眠秒数,当您启动应用程序并检查状态时,您将获得运行状态,但在真正执行之前它仍然处于睡眠状态

3.当你改变你的配置文件时,你需要使用reload cmd或者重新启动你的supervisord来使其工作