安装Shopware插件后如何重启Worker加载新代码?
解决Shopware插件安装后自动重启Supervisor Worker的方案
问题背景
插件安装后,Supervisor管理的Shopware消息队列Worker未加载新插件的定时任务代码,导致控制台出现Error thrown while handling message ...\ScheduledTask\Task. Sending for retry #3 using 4000 ms delay. Error: "No handler for message "...\ScheduledTask\Task"."报错,核心需求是实现插件安装/激活后自动重启Worker以加载最新代码。
可行实现方案
1. 利用Shopware插件生命周期事件触发重启
Shopware提供插件安装、激活的生命周期钩子,可在插件核心类中监听对应事件,执行Worker重启操作。
代码示例
在插件的src/[YourPluginName].php中添加逻辑:
use Shopware\Core\Framework\Plugin; use Shopware\Core\Framework\Plugin\Context\ActivateContext; use Shopware\Core\Framework\Plugin\Context\InstallContext; use Symfony\Component\Process\Process; class YourPluginName extends Plugin { public function install(InstallContext $context): void { parent::install($context); $this->restartSupervisorWorker(); } public function activate(ActivateContext $context): void { parent::activate($context); $this->restartSupervisorWorker(); } private function restartSupervisorWorker(): void { // 替换为你的Supervisor进程组名或Worker名称 $process = new Process(['supervisorctl', 'restart', 'shopware-worker:*']); $process->run(); // 可选:记录命令执行异常 if (!$process->isSuccessful()) { error_log('Worker重启失败: ' . $process->getErrorOutput()); } } }
2. 配置Supervisor权限
运行Shopware的Web服务器用户(如www-data)需要拥有执行supervisorctl的权限,可通过sudoers规则配置:
- 在
/etc/sudoers.d/shopware-worker文件中添加:www-data ALL=(ALL) NOPASSWD: /usr/bin/supervisorctl restart shopware-worker:* - 对应修改代码中的重启命令:
$process = new Process(['sudo', 'supervisorctl', 'restart', 'shopware-worker:*']);
3. 替代方案:用Shopware内置命令触发重启
如果不想直接调用Supervisor命令,可利用Shopware自带的messenger:stop-workers命令停止Worker,依赖Supervisor的autorestart=true配置(默认开启)自动拉起新进程:
private function restartSupervisorWorker(): void { $projectDir = $this->container->getParameter('kernel.project_dir'); $process = new Process(['php', $projectDir . '/bin/console', 'messenger:stop-workers']); $process->run(); }
注意事项
- 确保服务器上的命令路径正确(如
supervisorctl可能位于/usr/bin/supervisorctl),根据实际环境调整。 - 避免在插件更新、卸载等不必要场景触发重启,可根据需求选择仅在安装/激活时执行。
内容的提问来源于stack exchange,提问作者user21218060
相关产品推荐
相关产品推荐

