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

Laravel Horizon部分任务始终显示暂停状态,如何避免该问题?

我来帮你搞定Laravel Horizon里任务一直显示"paused"的问题,这类情况我碰到过不少,大多和进程状态、配置或者依赖服务有关,下面是几个靠谱的排查方向:

1. 先确认Horizon进程是不是真的在跑

首先别光看控制面板显示,先查底层进程状态。在服务器上跑命令:

ps aux | grep horizon

如果看不到Horizon的主进程,那肯定是进程挂了,先重启:

php artisan horizon:terminate
php artisan horizon

要是你用supervisor、systemd这类工具管理Horizon,得检查服务状态,比如supervisor可以跑:

supervisorctl status

要是服务异常,直接重启对应的配置就行。

2. 排查队列是否被手动/配置暂停

有时候可能不小心在Horizon面板里点了暂停按钮,先去面板里找对应队列,看看有没有"Resume"按钮,有的话点一下恢复。

另外,去config/horizon.php里检查环境配置,有没有给对应环境的supervisor设置了paused => true:

'environments' => [
    'production' => [
        'supervisor-1' => [
            'maxProcesses' => 10,
            'paused' => false, // 这里一定要设为false
        ],
    ],
],

改完配置记得重启Horizon生效。

3. 检查worker的超时和任务限制配置

如果worker进程因为达到运行时间或处理任务数上限频繁退出,可能会让你误以为队列暂停了。去config/horizon.php的supervisor配置里看看:

'supervisor-1' => [
    // ...其他配置
    'maxTime' => 0, // 0表示不限制进程运行时长,别设太小
    'maxJobs' => 0, // 0表示不限制进程处理任务数
    'timeout' => 60, // 任务超时时间,太长可能导致进程挂住
],

如果maxTime或maxJobs数值太小,调大或者设为0试试,然后重启Horizon。

4. 验证Redis连接是否正常

Horizon完全依赖Redis管理队列和进程状态,Redis出问题的话,Horizon就会乱套。先测试连接:

php artisan redis:cli

进去后输入PING,看是否返回PONG。或者用Laravel的tinker测试:

php artisan tinker

然后执行:

Redis::ping();

如果Redis连接失败,检查Redis服务是否启动、配置文件里的Redis参数(主机、端口、密码)是否正确,修复后重启Horizon。

5. 清理Horizon状态缓存

有时候Horizon的状态缓存会出问题,导致显示异常。跑命令清理:

php artisan horizon:clear

顺便也清理下Laravel的配置和缓存:

php artisan config:clear
php artisan cache:clear

然后重启Horizon,看看状态是否恢复正常。

6. 检查Horizon和Laravel版本兼容性

版本不兼容也会导致各种奇怪问题,比如Laravel 10需要Horizon 5.x,Laravel 9对应Horizon 4.x。去composer.json里核对版本,要是不匹配,更新到兼容版本:

composer require laravel/horizon:^x.x

替换x.x为对应兼容的版本号,更新后发布配置并重启Horizon。

一般按这个顺序排查,基本能解决任务一直显示paused的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:53:42