当进程无法在开始时启动时,supervisorctl更新将挂起

时间:2016-04-24 03:46:16

标签: supervisord supervisor

在一个案例中,当一个进程无法在开始时启动时,例如在conf中定义的二进制文件不存在或出现conf错误,程序就无法启动运行状态,留在退缩状态。

ex_sample_1.1.1.0.223817.486782  BACKOFF    can't find command '/home/admin/ex_sample_1.1.1.0.223817.486782/ex_sample'

然后如果我们删除supervisor conf,运行sudo supervisorctl update,该命令将永远挂起。

我已经阅读了主管代码,但仍然有点困惑,也许我很难说清楚。当我删除BACKOFF程序主管conf后输入sudo supervisorctl更新时,supervisor会调用stopPorcessGroup,将此rpc all发送到supervisord http服务器。

results = supervisor.stopProcessGroup(gname)

它挂起,为什么stopProcessGroup没有超时?当rpc全部到supervisord服务时,supervisord服务会调用killall函数,我认为它应该调用一次,如果killall函数失败,它会返回supervisorctl,为什么要挂在这里?

killall = make_allfunc(processes, isRunning, self.stopProcess,
                               wait=wait)
killall.delay = 0.05
killall.rpcinterface = self
return killall # deferred

在supervisord日志中,我发现killall函数被称为重复,并且没有返回supervisorctl supervisorctl update更新的原因,但我没有找到重复调用killall函数的代码。 killall函数如何以及为什么重复调用,以及如何解决它?

0 个答案:

没有答案