安装并使用Supervisor
Supervisor – 一款可以无限期运行 Shell 命令并在失败时重新启动的工具
下步骤安装和配置它,并将 {domain} 替换为您的 Magento 网站域,将 {project_dir} 替换为 Magento 项目目录的绝对路径:
- 使用 root 用户安装Supervisor :
apt-get install supervisor
2. /etc/supervisor/conf.d/{domain}__mana_call.conf
使用用户创建文件root
:
[program:queue-worker] #Supervisor 程序名定义
process_name=%(program_name)s_%(process_num)02d #子进程命名方式
directory=/var/www/magento #执行目录
command=/home/bin/php /var/www/magento/bin/magento queue:consumers:start async.operations.all --max-messages=10000 --batch-size=500 --single-thread #实际执行命令
autostart=true #Supervisor 启动后自动运行该消费者进程
autorestart=true #Supervisor 启重启之后后自动运行该消费者进程
user=www-data #使用 root 用户执行此命令。⚠️ 不推荐 用 root 执行,建议用 www-data 或运行 Magento 的特定用户
numprocs=1 #启动的进程数量
redirect_stderr=false #stderr 和 stdout 分开写入不同文件,即错误不会和正常输出混在一起
stdout_logfile=/var/log/magento_hu_async.log #标准输出日志文件
stderr_logfile=/var/log/magento_hu_async_err.log #标准错误日志文件
注意 redirect_stderr=true #把 stderr 重定向到 stdout,错误和正常日志统一写入文件#
3. 使用 root 用户在 Supervisor 下启动我们的扩展的 Magento 作业队列:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start magento-consumer-async-operations:*
supervisor 管理命令
#启动/开启
sudo /usr/bin/systemctl start supervisor.service
------------------------------------------------
#停止
sudo /usr/bin/systemctl stop supervisor.service
------------------------------------------------
#查看状态
sudo /usr/bin/systemctl status supervisor.service
$ sudo systemctl status supervisor.service
● supervisor.service - Supervisor process control system for UNIX
Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; preset: enabled)
Active: active (running) since Tue 2025-08-05 08:12:34 CEST; 3h 56min ago
Docs: http://supervisord.org
Main PID: 1314 (supervisord)
Tasks: 1 (limit: 77001)
Memory: 31.3M
CPU: 1min 37.431s
CGroup: /system.slice/supervisor.service
└─1314 /usr/bin/python3 /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
-------------------------------------------------
#重新启动supervisor
sudo systemctl restart supervisor.service
-------------------------------------------------
#重新加载supervisor服务的配置(不中断服务,平滑重载
sudo /usr/bin/systemctl reload supervisor.service
-------------------------------------------------
#进入supervisorctl的交互式命令行界面,用于管理supervisor托管的子进程
sudo /usr/bin/supervisorctl
-------------------------------------------------
#重新读取所有子进程的配置文件(通常在修改了子进程配置文件后使用)
sudo /usr/bin/supervisorctl reread
-------------------------------------------------
#根据重新读取的配置文件更新supervisor的状态
sudo /bin/supervisorctl update
#查看由Supervisor管理的子进程(程序)的状态
#关闭
$ sudo supervisorctl status
queue-worker:queue-worker_00 FATAL Exited too quickly (process log may have details)
#开启
$ sudo supervisorctl status
queue-worker:queue-worker_00 RUNNING pid 322011, uptime 0:01:42
检查消息队列进程是否存在
ps -aux | grep "consumer"