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


9

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

我想将间隔设置为X秒,以使supervisor不会立即重启,但是它会等待给定的时间,然后再启动另一个工作程序。

这可能吗?怎么样?

Answers:


11

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

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

#!/bin/bash
/usr/local/bin/myprogram
sleep 30

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

command=/usr/local/bin/myprogram.sh

直到/ usr / local / bin / myprogram返回时,睡眠才会执行?
loostro

确实,只有在myprogram退出后,睡眠才会开始计数。
2014年

问题在于该脚本不能处理信号,尤其是TERM。
Torsten Bronger

9

我需要一种简单的方法来从没有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

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
[...]

根据自己的喜好调整睡眠时间,并根据需要替换“ date >> / root / test.ts”。

如果您需要比每分钟更多地运行cronjob,则此解决方案也很方便。


+1为聪明的解决方案。我想做类似的事情。不幸的是,这对我不起作用,因为我需要使用RPC调用在侦听器中获取退出代码。不幸的是,主管退出后立即重新启动程序,使代码为0,叹息……还有其他想法吗?
Onema '16

0
[program:yourapp]
command = bash -c "sleep 60 && exec urcmd'
startsecs = 65 ; 

然后

supervisorctl -c your_config_file reload

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

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

2.建议将startsecs更改为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

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

3.当您更改配置文件时,您需要使用reload cmd或仅重新启动您的超级用户才能使其正常工作

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.