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

Laravel 10在Hostinger配置queue:work定时任务遇问题求助

Hostinger上Laravel 10定时任务执行queue:work失败排查与修复

问题现状

在Hostinger上配置Laravel 10定时任务,目标是每分钟执行php artisan queue:work --tries=3,但执行schedule:run后返回提示:

INFO No scheduled commands are ready to run.

当前配置:

  • 主机定时任务命令:
    /usr/bin/php /home/u******/domains/mydomain.com/public_html/artisan schedule:run
    
  • app/Console/Kernel.php调度代码:
    protected function schedule(Schedule $schedule): void
    {
        // $schedule->command('inspire')->hourly();
    
        $schedule->command('queue:work --tries=3')
        ->cron('* * * * *')
        ->withoutOverlapping();
    }
    

核心问题分析

  1. queue:work常驻特性冲突:默认queue:work是常驻进程,首次执行后会持续运行处理队列。withoutOverlapping()检测到已有进程时会跳过后续调度,导致schedule:run提示无任务可执行。
  2. PHP CLI路径可能错误:Hostinger部分环境的PHP命令路径并非/usr/bin/php,可能是版本特定路径(如/usr/bin/php8.2)或/usr/local/bin/php,路径错误会导致调度器无法启动。
  3. 任务未被正确识别:若Kernel.php存在语法错误或Laravel调度器未正确加载,会导致任务不被系统识别。

修复方案

方案一:调整队列命令为一次性执行模式

修改Kernel.php中的调度代码,添加--stop-when-empty参数,让queue:work处理完当前队列后自动退出,避免常驻进程:

protected function schedule(Schedule $schedule): void
{
    $schedule->command('queue:work --tries=3 --stop-when-empty')
        ->everyMinute() // 等价于cron('* * * * *')
        ->withoutOverlapping();
}

方案二:修正主机定时任务的PHP路径

  1. 通过SSH登录服务器,执行以下命令获取正确的PHP CLI路径:
    which php
    
  2. 将主机定时任务命令中的PHP路径替换为上述命令的输出结果,同时添加日志重定向(规避Hostinger限制):
    /正确的PHP路径 /home/u******/domains/mydomain.com/public_html/artisan schedule:run >> /dev/null 2>&1
    

验证步骤

  1. 进入项目根目录,执行以下命令查看已配置的调度任务,确认任务存在:
    php artisan schedule:list
    
  2. 手动执行调度命令,验证是否正常触发队列任务:
    php artisan schedule:run
    
  3. 查看storage/logs/laravel.log日志,确认队列任务是否被正确处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 02:58:19