首页 > 解决方案 > Laravel 调度程序是否有可能跳过命令?

问题描述

我有一个 Kernel.php,其中定义了许多不同的命令,如下所示:

(Laravel v5.5.*)

<?php

.....

protected function schedule(Schedule $schedule)
{
    $fileCronLog = '/var/log/laravel-scheduler.log';

    $schedule->command('do:something params...')->everyFiveMinutes()->appendOutputTo($fileCronLog);
    $schedule->command('do:something params...')->everyMinute()->appendOutputTo($fileCronLog);
    $schedule->command('do:something params...')->everyMinute()->appendOutputTo($fileCronLog);
    $schedule->command('do:something params...')->everyMinute()->appendOutputTo($fileCronLog);
    $schedule->command('do:something params...')->everyMinute()->appendOutputTo($fileCronLog);
    $schedule->command('do:something params...')->everyMinute()->appendOutputTo($fileCronLog);
    $schedule->command('do:something params...')->everyTenMinutes()->appendOutputTo($fileCronLog);
    $schedule->command('do:something params...')->everyFiveMinutes()->appendOutputTo($fileCronLog);
    $schedule->command('do:something params...')->everyTenMinutes()->appendOutputTo($fileCronLog);
    $schedule->command('do:something params...')->everyThirtyMinutes()->appendOutputTo($fileCronLog);

    .......

我注意到有时就像某些进程/命令根本没有启动......

这与频率较低的命令相匹配,例如: everyTenMinuteseveryThirtyMinutes......

我假设当 crontab 启动 Laravel 时schedule:run,Laravel 可能会在内部排队所有预定的命令......也许第一个命令需要超过一分钟的时间来处理......所以当命令everyTenMinutes的时间已经过去了和 Laravel 跳过执行....

是这样吗?或者,如果 Laravel 过载,可能会在一段时间后放弃处理调度?

我已经注意到 Laravel 不会分叉 php 进程,而是按顺序执行它们。在过去,我通过直接在 crontab 中并行执行一些命令来解决这个问题......

我该如何克服呢?有没有我可以直接利用框架的方法或选项?

标签: laravelschedule

解决方案


推荐阅读