Docker 如果有一个过程退出,则退出所有supervisord过程

Docker 如果有一个过程退出,则退出所有supervisord过程,docker,supervisord,Docker,Supervisord,我希望有一个docker图像: -运行乘客服务器和另一个守护进程以监视乘客服务器。 -只要这两个进程中的任何一个退出一次,容器就会立即退出。 -将所有日志定向到标准输出 在配置文件中,我放置了一个事件监听器(引用:),它为passenger_monit程序捕获一些事件,并执行一个脚本tt.sh 我可以看到一个额外的乘客监控程序实例正在生成,并在几次尝试后达到致命状态。另一个乘客监视器和乘客服务器正常。其他乘客的事件未到达eventlistener 以下是未按预期工作的脚本: 这是supervis

我希望有一个docker图像:
-运行乘客服务器和另一个守护进程以监视乘客服务器。
-只要这两个进程中的任何一个退出一次,容器就会立即退出。
-将所有日志定向到标准输出

在配置文件中,我放置了一个事件监听器(引用:),它为passenger_monit程序捕获一些事件,并执行一个脚本tt.sh

我可以看到一个额外的乘客监控程序实例正在生成,并在几次尝试后达到致命状态。另一个乘客监视器和乘客服务器正常。其他乘客的事件未到达eventlistener

以下是未按预期工作的脚本:

这是
supervisord.conf

[supervisord]

nodaemon=true
stdout_logfile=/dev/fd/1
redirect_stderr=true
stdout_logfile_maxbytes=0

[unix_http_server]
file=%(here)s/supervisor.sock

[supervisorctl]
serverurl=unix://%(here)s/supervisor.sock

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[program:passenger_monit]

command=./script/passenger_monit.sh
process_name=passenger_monit
startretries=999
redirect_stderr=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
autorestart=true
killasgroup=true
stopasgroup=true
numprocs=1

[program:passenger_server]

command=passenger start
startretries=999
redirect_stderr=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
autorestart=true
killasgroup=true
stopasgroup=true
numprocs=1

[eventlistener:passenger_monit_exit]
command=./tt.sh
process_name=passenger_monit
events=PROCESS_STATE_STARTING,PROCESS_STATE_EXITED,PROCESS_STATE_FATAL
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
这是
/script/passenger\u monit.sh

#!/bin/bash

set -x

cd /passenger/newrelic_passenger_plugin/

# if exec is not put, then this process is not killed when supervisord exits
exec ./newrelic_passenger_agent

set +x
#!/bin/bash
echo "in tt!"
这是
tt.sh

#!/bin/bash

set -x

cd /passenger/newrelic_passenger_plugin/

# if exec is not put, then this process is not killed when supervisord exits
exec ./newrelic_passenger_agent

set +x
#!/bin/bash
echo "in tt!"
这是我运行的命令:

docker exec -it -u deploy 56bbbbe4352b  supervisord
这是我得到的输出:

2016-08-26 19:47:29,369 INFO RPC interface 'supervisor' initialized
2016-08-26 19:47:29,369 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2016-08-26 19:47:29,370 INFO supervisord started with pid 2446
2016-08-26 19:47:30,374 INFO spawned: 'passenger_monit' with pid 2452
2016-08-26 19:47:30,377 INFO spawned: 'passenger_server' with pid 2453
in tt!
2016-08-26 19:47:30,392 INFO exited: passenger_monit (exit status 0; not expected)
=============== Phusion Passenger Standalone web server started ===============
PID file: /home/deploy/abc/tmp/pids/passenger.3000.pid
Log file: /home/deploy/abc/log/passenger.3000.log
Environment: development
Accessible via: http://0.0.0.0:3000/

You can stop Phusion Passenger Standalone by pressing Ctrl-C.
Problems? Check https://www.phusionpassenger.com/library/admin/standalone/troubleshooting/
===============================================================================
2016-08-26 19:47:31,565 INFO spawned: 'passenger_monit' with pid 2494
2016-08-26 19:47:31,566 INFO success: passenger_server entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
in tt!
2016-08-26 19:47:31,571 INFO exited: passenger_monit (exit status 0; not expected)
2016-08-26 19:47:33,576 INFO spawned: 'passenger_monit' with pid 2498
in tt!
2016-08-26 19:47:33,583 INFO exited: passenger_monit (exit status 0; not expected)
2016-08-26 19:47:36,588 INFO spawned: 'passenger_monit' with pid 2499
in tt!
2016-08-26 19:47:36,595 INFO exited: passenger_monit (exit status 0; not expected)
2016-08-26 19:47:37,597 INFO gave up: passenger_monit entered FATAL state, too many start retries too quickly


^C2016-08-26 19:47:47,730 WARN received SIGINT indicating exit request
2016-08-26 19:47:47,735 INFO waiting for passenger_server to die
Stopping web server... done
2016-08-26 19:47:47,839 INFO stopped: passenger_server (exit status 2)
这是
supervisorctl状态的输出

passenger_monit                  STOPPED    Not started
passenger_monit_exit:passenger_monit FATAL      Exited too quickly (process log may have details)
passenger_server                 RUNNING    pid 2453, uptime 0:00:14
supervisord-v的输出

3.0b2

以下几点应该行得通。请注意,10秒的脚本将在5秒后终止

[supervisord]
loglevel=warn
nodaemon=true

[program:hello]
command=bash -c "echo waiting 5 seconds . . . && sleep 5"
autorestart=false
numprocs=1
startsecs=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0

[program:world]
command=bash -c "echo waiting 10 seconds . . . && sleep 10"
autorestart=false
numprocs=1
startsecs=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0

[eventlistener:processes]
command=bash -c "printf 'READY\n' && while read line; do kill -SIGQUIT $PPID; done < /dev/stdin"
events=PROCESS_STATE_STOPPED,PROCESS_STATE_EXITED,PROCESS_STATE_FATAL
[supervisord]
日志级别=警告
nodaemon=true
[节目:你好]
command=bash-c“回声等待5秒…&&sleep 5”
自动重新启动=错误
numprocs=1
startsecs=0
stderr_日志文件=/dev/stderr
stderr_日志文件_maxbytes=0
标准输出日志文件=/dev/stdout
标准输出日志文件最大字节数=0
[节目:世界]
command=bash-c“回声等待10秒…&&sleep 10”
自动重新启动=错误
numprocs=1
startsecs=0
stderr_日志文件=/dev/stderr
stderr_日志文件_maxbytes=0
标准输出日志文件=/dev/stdout
标准输出日志文件最大字节数=0
[eventlistener:进程]
command=bash-c“printf'READY\n'&&while read line;do kill-SIGQUIT$PPID;done
请不要超级回答。很好!