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

如何实现Laravel queue job每秒运行?Supervisor配置调整咨询

配置Supervisor实现Laravel队列任务按预期执行

咱先理清楚:Supervisor的核心作用是帮你维持Laravel队列worker进程的持续运行,而要实现任务每秒执行的需求,得把worker的命令参数和Supervisor的进程配置配合好。下面一步步来操作:

1. 创建/编辑Supervisor配置文件

Supervisor的自定义配置一般放在/etc/supervisor/conf.d/目录下,你可以新建一个以.conf结尾的配置文件(比如laravel-queue-worker.conf),内容如下:

[program:laravel-queue-worker]
process_name=%(program_name)s_%(process_num)02d
# 替换成你的Laravel项目绝对路径,队列驱动换成你实际用的(比如database/redis)
command=php /var/www/your-laravel-project/artisan queue:work redis --sleep=0 --tries=3 --timeout=60
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
# 换成你的服务器运行用户(比如www-data或你的用户名)
user=server-username
numprocs=1
redirect_stderr=true
# 日志路径可自定义,方便排查问题
stdout_logfile=/var/www/your-laravel-project/storage/logs/queue-worker.log

关键参数说明:

  • command部分:这是控制任务执行频率的核心
    • --sleep=0:任务处理完成后不等待,立刻检查队列是否有新任务(如果队列空时不想过度消耗资源,也可以设为1,但要确保有任务时能及时响应)
    • --tries=3:任务失败后的重试次数,根据你的业务需求调整
    • --timeout=60:单个任务的超时时间,避免任务卡住拖垮worker
  • numprocs:启动的worker进程数量,单任务场景1个足够,高并发场景可适当增加
  • autorestart=true:确保worker进程意外退出时自动重启,保证任务持续处理

2. 重新加载Supervisor配置

配置文件写完后,需要让Supervisor识别新配置:

# 重新读取所有配置文件
sudo supervisorctl reread

# 更新配置并启动/重启worker
sudo supervisorctl update

# 手动启动worker(如果之前没运行的话)
sudo supervisorctl start laravel-queue-worker:*

3. 验证运行状态

用下面的命令检查worker是否正常运行:

sudo supervisorctl status

如果输出显示laravel-queue-worker:laravel-queue-worker_00 RUNNING,说明进程已经正常启动。

额外重要提示

如果你的需求是周期性每秒触发任务(而非处理队列中已有的任务),那单纯靠队列worker还不够,得结合Laravel的任务调度器(Scheduler):

  1. 在app/Console/Kernel.php的schedule方法里定义每秒执行的命令:
    protected function schedule(Schedule $schedule)
    {
        // 替换成你的自定义命令,用于生成队列任务
        $schedule->command('your:task-command')->everySecond();
    }
    
  2. 再用Supervisor维持调度器的持续运行(因为默认Cron只能每分钟执行一次,无法满足每秒需求),新建一个scheduler.conf配置:
    [program:laravel-scheduler]
    command=php /var/www/your-laravel-project/artisan schedule:run --verbose --no-interaction
    autostart=true
    autorestart=true
    user=server-username
    stdout_logfile=/var/www/your-laravel-project/storage/logs/scheduler.log
    
  3. 同样执行reread和update命令加载配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:38:45