我正在运行 Supervisor 3.2.0-2ubuntu0.2 Ubuntu 16.04。我想更改我的一个进程使用的命令,但我需要确保主管向它发送正确的信号,以便进程可以结束;不幸的是,即使我已经请求了 TERM,主管仍然会发送 SIGKILL。
[program:my-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/worker/job --param=a,b,c
autostart=true
autorestart=true
stopwaitsecs=10
user=worker
stopsignal=TERM
numprocs=1
stdout_logfile=/var/log/supervisor/worker.log
stderr_logfile=/var/log/supervisor/worker-error.log
Run Code Online (Sandbox Code Playgroud)
如果我遵循Supervisor 在更改“命令”后未加载新的配置文件(例如:),php /home/worker/job --param=a,b,c,d
我会在日志中看到以下内容:
2018-08-08 09:05:21,514 INFO waiting for worker_00 to stop
2018-08-08 09:05:21,533 INFO stopped: worker_00 (terminated by (9) SIGKILL)
Run Code Online (Sandbox Code Playgroud)
我特别需要确保发送 SIGTERM - 我已经深入研究了代码,但我没有看到任何明显的迹象表明我的配置不正确。我调用了错误的命令吗?service supervisord restart
触发相同。
Supervisord 向您的 Worker 发送 SIGTERM,但 Worker 需要拦截该信号并完成干净关闭的工作。然后它需要将 SIGCHLD 发送回supervisord。
如果supervisord在一定时间内没有收到SIGCHLD,它会使用SIGKILL杀死worker作为最后的手段。请参阅此处有关 stopwaitsecs 的部分:http://supervisord.org/configuration.html
以下是如何在 PHP 中处理信号的示例:/sf/ask/550504461/
归档时间: |
|
查看次数: |
14407 次 |
最近记录: |