主管及;Docker:如果服务不可用,如何退出Supervisor';我不能开始?
我目前正在使用Docker映像中的Supervisor来启动和管理我的服务,我想将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来完成此操作。将其订阅到事件
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
。