由 supervisord 多次运行的 Laravel 调度器

问题描述 投票:0回答:2

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

  1. 这是 supervisord conf 文件。 sudo nano /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
  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();
} 
  1. 这是 schedule.log 文件

enter image description here

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

php laravel scheduler supervisord
2个回答
3
投票

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

crontab

但如果你坚持使用

supervisor
关注我:

你应该使用

php artisan schedule:work
而不是
php artisan schedule: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

记得使用

directory=/home/nordicstandard.net/
到你的项目文件夹。

就是这样。它的工作...

sudo supervisorctl
->
status
你可以看到这样的输出:

laravel-worker-nordicstandard:laravel-worker-nordicstandard_00                     RUNNING   pid 853, uptime 2:58:22
laravel-worker-nordicstandard:laravel-worker-nordicstandard_01                     RUNNING   pid 854, uptime 2:58:22
laravel-worker-nordicstandard:laravel-worker-nordicstandard_02                     RUNNING   pid 855, uptime 2:58:22
laravel-worker-nordicstandard:laravel-worker-nordicstandard_03                     RUNNING   pid 857, uptime 2:58:22
laravel-worker-nordicstandard:laravel-worker-nordicstandard_04                     RUNNING   pid 859, uptime 2:58:22
laravel-worker-nordicstandard:laravel-worker-nordicstandard_05                     RUNNING   pid 860, uptime 2:58:22
laravel-worker-nordicstandard:laravel-worker-nordicstandard_06                     RUNNING   pid 861, uptime 2:58:22
laravel-worker-nordicstandard:laravel-worker-nordicstandard_07                     RUNNING   pid 865, uptime 2:58:22
laravel-worker-nordicstandard-schedule:laravel-worker-nordicstandard-schedule_00   RUNNING   pid 4084, uptime 0:06:55

最后一行与

schedule
有关,其他与
queue
有关。

注意:你应该小心

numprocs=1
,它不应该超过一个。

注2:

php artisan schedule:listen
就像
php artisan schedule:work
php artisan schedule:listen
对开发有好处,因为它正在监听代码中的最新更改。但是
php artisan schedule:work
不会考虑您的更改并使用缓存。


0
投票

我自己也遇到了同样的问题,对我来说原来是supervisor在守护进程模式下运行cron(

-b
,也是默认的),此时后台supervisor认为它已经退出所以重新启动它。 Supervisor 在放弃之前重复了四次,所以我们有四个 cron 实例正在运行,因此每个计划任务出现四次。在前台模式下运行 cron (
-f
) 修复了它。

© www.soinside.com 2019 - 2024. All rights reserved.