Laravel 调度程序由supervisord运行多次

Ric*_*hon 0 php scheduler supervisord laravel

我正在尝试将 Supervisord 与 Laravel 调度程序一起使用。它可以工作,但运行了多次,我不知道是否有任何配置错误。但我期望的是每个调度程序只有一次。如果我对这种情况有任何经验,请帮助我。

  1. 这是supervisord conf 文件。须藤纳米 /etc/supervisord.conf
[program:laravel-scheduler]
client_loop: send disconnect: Broken pipeum)02d
command=php /var/www/project-api/artisan schedule:run --verbose --no-interaction
[Process completed]autostart=true
autorestart=true
numprocs=1
user=nginx
redirect_stderr=true
stdout_logfile=/var/www/project-api/storage/logs/schedule.log
stdout_logfile_maxbytes=10MB
logfile_backups=10
Run Code Online (Sandbox Code Playgroud)
  1. 这是 laravel 控制台内核
protected function schedule(Schedule $schedule)
{
    $schedule->command('telescope:prune --hours=24')->daily();
    $schedule->command('horizon:snapshot')->everyFiveMinutes();
    $schedule->job(new HourlyJob(), QueueName::HOURLY_JOB)->hourly();
    $schedule->job(new MinuteJob(), QueueName::MINUTE_JOB)->everyTwoMinutes();
} 
Run Code Online (Sandbox Code Playgroud)
  1. 这是schedule.log 文件

在此输入图像描述

调度程序每两分钟正确运行一次,但问题是运行多个调度命令。请帮我解决这个问题。谢谢

Ras*_*kul 8

对于日程安排,你应该使用 cronjob,你可以使用crontab

但如果你坚持使用supervisor跟随我:

您应该使用php artisan schedule:worknot php artisan schedule:run,因为 run 命令只会运行它一次。

我的主管的日程安排运行良好,所以我想在这里分享:

[program:laravel-worker-nordicstandard-schedule]
process_name=%(program_name)s_%(process_num)02d
directory=/home/nordicstandard.net/
command=php artisan schedule:work
autostart=true
autorestart=true
user=root
numprocs=1
redirect_stderr=true
stdout_logfile= /home/nordicstandard.net/storage/logs/worker1.log
Run Code Online (Sandbox Code Playgroud)

请记住使用directory=/home/nordicstandard.net/您的项目文件夹。

就是这样。它正在工作...

sudo supervisorctl->中status你可以看到如下输出:

laravel-worker-nordicstandard-schedule:laravel-worker-nordicstandard-schedule_00   RUNNING   pid 4084, uptime 0:06:55
Run Code Online (Sandbox Code Playgroud)

最后一行与 相关,schedule其他行与 相关queue

注意:您应该小心,numprocs=1并且不应超过一个。

note2: php artisan schedule:listen类似于php artisan schedule:workphp artisan schedule:listen有利于开发,因为它正在监听代码中的最新更改。但php artisan schedule:work不会考虑您的更改并使用缓存。