我正在尝试将 Supervisord 与 Laravel 调度程序一起使用。它工作但运行多次,我不知道是否有任何配置错误。但我所期望的只是每个调度程序一次。如果我对这种情况有任何经验,请帮助我。
[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
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(); }
调度程序每两分钟正确运行一次,但问题是多次运行调度命令。请帮我解决这个问题。谢谢
对于日程安排,你应该去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
不会考虑您的更改并使用缓存。
我自己也遇到了同样的问题,对我来说原来是supervisor在守护进程模式下运行cron(
-b
,也是默认的),此时后台supervisor认为它已经退出所以重新启动它。 Supervisor 在放弃之前重复了四次,所以我们有四个 cron 实例正在运行,因此每个计划任务出现四次。在前台模式下运行 cron (-f
) 修复了它。