退出所有supervisord进程

我有一个docker图像,我希望:
– 运行乘客服务器和另一个守护程序来监视乘客服务器。
– 只要这两个过程中的任何一个退出,容器即退出一次。
– 将所有日志指向标准输出

在configuration文件中,我把一个事件监听器(参考: https : //serverfault.com/questions/760726/how-to-exit-all-supervisor-processes-if-one-exited-with-0-result/762406 #762406 )捕获passenger_monit程序的一些事件并执行脚本tt.sh.

我可以看到一个额外的passenger_monit程序实例正在产生,并在几次尝试后达到致命状态。 其他passenger_monit和passenger_server都很好。 其他passenger_monit的事件不会传达给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_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 

这是tt.sh

 #!/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 status的输出

 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