主管及;Docker:如果服务不可用,如何退出Supervisor';我不能开始?

主管及;Docker:如果服务不可用,如何退出Supervisor';我不能开始?,docker,supervisord,Docker,Supervisord,我目前正在使用Docker映像中的Supervisor来启动和管理我的服务,我想将Supervisor配置为在至少一个服务进入致命状态时退出 这样做,我想避免Docker容器在除Supervisor外没有其他东西成功启动时处于运行状态。您可以使用Supervisor来完成此操作。将其订阅到事件PROCESS\u STATE\u FATAL,并通过向supervisord发送SIGTERM来响应该事件,您可能正在容器中作为PID 1运行。如mhsmith所述,事件侦听器是实现此目的的最佳方法。您可

我目前正在使用Docker映像中的Supervisor来启动和管理我的服务,我想将Supervisor配置为在至少一个服务进入致命状态时退出


这样做,我想避免Docker容器在除Supervisor外没有其他东西成功启动时处于运行状态。

您可以使用Supervisor来完成此操作。将其订阅到事件
PROCESS\u STATE\u FATAL
,并通过向supervisord发送SIGTERM来响应该事件,您可能正在容器中作为PID 1运行。

如mhsmith所述,事件侦听器是实现此目的的最佳方法。您可以使用以下侦听器(
将此添加为
/usr/local/bin/exit event listener
):

#/usr/bin/env python
导入操作系统
输入信号
从主管导入childutils
def main():
尽管如此:
headers,payload=childutils.listener.wait()
childutils.listener.ok()
如果标题['eventname']!='进程\状态\致命':
持续
kill(os.getppid(),signal.SIGTERM)
如果名称=“\uuuuu main\uuuuuuuu”:
main()
然后,向主管登记:

[eventlistener:exit_on_any_fatal]
command=exit-event-listener
events=PROCESS_STATE_FATAL

如果这是一个真正的要求,考虑将您的服务分成单独的容器。你在要求supervisord自杀。我认为这更像是他没用(没有工作可做)后的“辞职”,而不是“自杀”:-)我认为supervisord目前不能自杀,所以无论你需要什么外部流程来监控它。可以在容器内或容器外进行。从容器外部运行一个命令来检查管理者可能是最容易的,如果没有任何工作,那么就杀死容器。或者制作一个主管程序:xxx部分,运行一个脚本,检查主管并自杀OThanks用于描述这种方法。但是,我无法使其工作-
exit event listener
返回了退出代码127(
Command not found
),因此我必须用
Command=python exit event listener
替换
Command=exit event listener