You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地Docker环境下,如何用Supervisord自动重启Symfony Messenger Workers?

解决Symfony Messenger Workers代码更新后自动重启的方案

针对本地开发环境中代码更新后需要手动停止Messenger Workers的问题,这里提供几个实用的实现思路:

思路1:利用Supervisord事件监听器监听文件变化

Supervisord支持自定义事件监听器,可通过脚本监控项目核心代码目录的文件变更,触发自动停止Worker的操作:

  1. 编写文件监控脚本(比如watch_code_changes.sh):
#!/bin/bash
# 监控src、config等核心代码目录的变更
inotifywait -m -r -e modify,create,delete /var/www/html/src /var/www/html/config | while read path action file; do
    # 触发Worker停止命令
    php /var/www/html/bin/console messenger:stop-workers
done

给脚本添加执行权限:chmod +x watch_code_changes.sh

  1. 在Supervisord配置中添加事件监听器:
[eventlistener:code-change-watcher]
command=/var/www/html/watch_code_changes.sh
user=root
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/code-watcher.log
stderr_logfile=/var/log/supervisor/code-watcher.err.log

此后只要代码目录有文件增删改,脚本就会自动执行停止命令,Supervisord的autorestart=true配置会自动重启新的Worker进程。

思路2:修改Worker启动命令,让进程自动检测代码变化后退出

无需额外监听器,直接修改Supervisord的Worker配置,让Worker进程在代码变化时自行终止,依赖Supervisord的自动重启特性:

修改原Worker配置的command字段,结合inotifywait实现:

[program:messenger-consume-sandbox]
process_name=%(program_name)s_%(process_num)02d
command=bash -c "inotifywait -q -r -e modify,create,delete /var/www/html/src /var/www/html/config & PID=$!; php bin/console messenger:consume sandbox -vv --time-limit=7200; kill $PID"
user=root
numprocs=2
startsecs=0
autostart=true
autorestart=true
startretries=10

该命令逻辑:后台启动inotifywait监控代码变化,同时启动Worker;当检测到文件变更时inotifywait退出,或Worker达到时间限制退出,最终杀掉监控进程。只要代码变化,整个命令就会结束,Supervisord会自动重启新的Worker。

思路3:本地脚本配合容器命令触发操作

如果本地代码通过挂载/同步工具映射到容器,可在本地写脚本监控代码变化,通过docker exec进入容器执行停止命令:

本地监控脚本示例(local_watch.sh):

#!/bin/bash
inotifywait -m -r -e modify,create,delete ./src ./config | while read path action file; do
    docker exec <你的容器名称> php bin/console messenger:stop-workers
done

启动脚本后,本地代码变更时会自动触发容器内的Worker停止命令。


内容的提问来源于stack exchange,提问作者BENCHAABANE Fahim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 09:00:11