一项服务在Docker容器中崩溃后,Supervisord不会退出

表现者

我具有以下受监管的配置:

[supervisord]
nodaemon=true
logfile=NONE

[program:service1]
command=/usr/sbin/service1
user=someone
autostart=true
autorestart=true
startsecs=30

[program:service2]
command=/usr/sbin/service2
user=root
autostart=true
autorestart=true
startsecs=30

我在Docker容器中使用此配置。问题是,如果service1崩溃,则容器将继续运行,就像一切正常一样。如何更改此行为,以便在一项服务崩溃时整个容器退出?

你好

SF的标题为:如果退出0的结果,如何退出所有主管程序听起来像是您要寻找的内容。

注意:此方法使用一个eventlistener

范例#1

[supervisord]
nodaemon=true
logfile=NONE

[program:service1]
command=/usr/sbin/service1
user=someone
autostart=true
;autorestart=true               ; disabled
;startsecs=30                   ; disabled
process_name=service1

[program:service2]
command=/usr/sbin/service2
user=root
autostart=true
;autorestart=true               ; disabled
;startsecs=30                   ; disabled
process_name=service2

[eventlistener:service1_exit]
command=kill.py
process_name=service1
events=PROCESS_STATE_EXITED

[eventlistener:service2_exit]
command=kill.py
process_name=service2
events=PROCESS_STATE_EXITED

kill.py脚本:

$ cat kill.py
#!/usr/bin/env python
import sys
import os
import signal

def write_stdout(s):
   sys.stdout.write(s)
   sys.stdout.flush()
def write_stderr(s):
   sys.stderr.write(s)
   sys.stderr.flush()
def main():
   while 1:
       write_stdout('READY\n')
       line = sys.stdin.readline()
       write_stdout('This line kills supervisor: ' + line);
       try:
               pidfile = open('/var/run/supervisord.pid','r')
               pid = int(pidfile.readline());
               os.kill(pid, signal.SIGQUIT)
       except Exception as e:
               write_stdout('Could not kill supervisor: ' + e.strerror + '\n')
       write_stdout('RESULT 2\nOK')
if __name__ == '__main__':
   main()
   import sys
main issue I forgot to point to **process_name**

范例#2

这个例子展示了一种更简化的方法,它仍然使用一个事件监听器,但是它展示了如何执行上面所示的操作,但是只用了一个监听器和shell脚本。

执行杀死的shell脚本:

$ cat stop-supervisor.sh
#!/bin/bash

printf "READY\n";

while read line; do
  echo "Processing Event: $line" >&2;
  kill -3 $(cat "/var/run/supervisord.pid")
done < /dev/stdin

该supervised.conf:

$ cat supervisord.conf
[supervisord]
nodaemon=true
loglevel=debug
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
childlogdir=/var/log/supervisor

[program:service1]
command=/usr/sbin/service1
user=someone
autostart=true
;autorestart=true               ; disabled
;startsecs=30                   ; disabled
process_name=service1

[program:service2]
command=/usr/sbin/service2
user=root
autostart=true
;autorestart=true               ; disabled
;startsecs=30                   ; disabled
process_name=service2

[eventlistener:processes]
command=stop-supervisor.sh
events=PROCESS_STATE_STOPPED, PROCESS_STATE_EXITED, PROCESS_STATE_FATAL

参考

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从数据中删除最后一项后,预算不会重新计算

来自分类Dev

将环境变量从一项服务传递到docker-compose.yml中的另一项服务

来自分类Dev

防止列数仅拆分容器中的一项

来自分类Dev

从一项服务广播的AngularJS不会触发对第二项服务的调用

来自分类Dev

加载ngFor中的最后一项后调用指令

来自分类Dev

Android中的一项服务多项活动

来自分类Dev

在一项服务中处理多个网络呼叫

来自分类Dev

Android中的一项服务多项活动

来自分类Dev

页眉和页脚作为Dropwizard中的一项服务?

来自分类Dev

如何在完成一项系统服务后触发另一个服务?

来自分类Dev

几秒钟后Docker容器退出

来自分类Dev

python docker容器在启动后立即退出

来自分类Dev

当列表中的最后一项是HStack时,应用程序崩溃

来自分类Dev

使列表中的最后一项填满容器的其余部分

来自分类Dev

使列表中的最后一项填满容器的其余部分

来自分类Dev

DOMSubtreeModified-检查容器中仅第一项是否已更改

来自分类Dev

退出/崩溃后在kubernetes上分析容器文件系统

来自分类Dev

允许仅从.NET Core中的一项服务调用帮助程序服务

来自分类Dev

Docker容器中的Java进程不会在main()的结尾退出

来自分类Dev

将会话工厂从一项服务传递到另一项服务

来自分类Dev

Angular 6 将价值从一项服务传递到另一项服务?

来自分类Dev

为什么此循环永远不会超过列表中的第一项?

来自分类Dev

在Red Hat 6.7中服务崩溃后inittab不会重新启动服务

来自分类Dev

如何在两项服务之间共享docker容量,其中一项是事实的来源?

来自分类Dev

如何设置一项以上的PRISMA服务,一项用于测试,一项用于开发

来自分类Dev

您如何构建Docker映像并将其用作GitHub动作中下一项工作的容器?

来自分类Dev

修改列表实例后,为什么存储对pop的函数调用不会返回最后一项?

来自分类Dev

如何从启动后将退出的容器中获取docker日志文件?

来自分类Dev

删除其中一项后,如何立即在listView中更新显示的每项总价?

Related 相关文章

  1. 1

    从数据中删除最后一项后,预算不会重新计算

  2. 2

    将环境变量从一项服务传递到docker-compose.yml中的另一项服务

  3. 3

    防止列数仅拆分容器中的一项

  4. 4

    从一项服务广播的AngularJS不会触发对第二项服务的调用

  5. 5

    加载ngFor中的最后一项后调用指令

  6. 6

    Android中的一项服务多项活动

  7. 7

    在一项服务中处理多个网络呼叫

  8. 8

    Android中的一项服务多项活动

  9. 9

    页眉和页脚作为Dropwizard中的一项服务?

  10. 10

    如何在完成一项系统服务后触发另一个服务?

  11. 11

    几秒钟后Docker容器退出

  12. 12

    python docker容器在启动后立即退出

  13. 13

    当列表中的最后一项是HStack时,应用程序崩溃

  14. 14

    使列表中的最后一项填满容器的其余部分

  15. 15

    使列表中的最后一项填满容器的其余部分

  16. 16

    DOMSubtreeModified-检查容器中仅第一项是否已更改

  17. 17

    退出/崩溃后在kubernetes上分析容器文件系统

  18. 18

    允许仅从.NET Core中的一项服务调用帮助程序服务

  19. 19

    Docker容器中的Java进程不会在main()的结尾退出

  20. 20

    将会话工厂从一项服务传递到另一项服务

  21. 21

    Angular 6 将价值从一项服务传递到另一项服务?

  22. 22

    为什么此循环永远不会超过列表中的第一项?

  23. 23

    在Red Hat 6.7中服务崩溃后inittab不会重新启动服务

  24. 24

    如何在两项服务之间共享docker容量,其中一项是事实的来源?

  25. 25

    如何设置一项以上的PRISMA服务,一项用于测试,一项用于开发

  26. 26

    您如何构建Docker映像并将其用作GitHub动作中下一项工作的容器?

  27. 27

    修改列表实例后,为什么存储对pop的函数调用不会返回最后一项?

  28. 28

    如何从启动后将退出的容器中获取docker日志文件?

  29. 29

    删除其中一项后,如何立即在listView中更新显示的每项总价?

热门标签

归档