【问题标题】:Laravel scheduler - Run specific days of month at specific timeLaravel 调度程序 - 在特定时间运行每月的特定日期
【发布时间】:2018-12-26 03:57:15
【问题描述】:

我想在特定时间的特定日期运行任务。 现在我使用这段代码在每月的第 1 天和第 15 天运行任务。

$schedule->command('payments:create')->daily()->when(function ()
    {
        $days = [1,15];
        $today = Carbon::today();

        return in_array($today->day, $days);
    });

有没有什么方法可以让这个任务在这些天的特定时间运行?

【问题讨论】:

    标签: php laravel-5.3


    【解决方案1】:

    您可以通过多种方式实现它,以下两条线:

    $schedule->command('payments:create')->monthlyOn(1, '15:00');
    $schedule->command('payments:create')->monthlyOn(15, '15:00');
    

    如果您想强制任务在维护模式下运行,您可以使用 evenInMaintenanceMode 方法:

    $schedule->command('payments:create')->monthlyOn(15, '15:00')->evenInMaintenanceMode();
    $schedule->command('payments:create')->monthlyOn(1, '15:00')evenInMaintenanceMode();
    

    另一种方式(Laravel 5.4 及以上版本)在线安排活动每月运行两次。

    $schedule->command('payments:create')->twiceMonthly( 1, 15);
    

    如果您想在特定时间运行,请使用 ->at();方法。

    $schedule->command('payments:create')->twiceMonthly( 1, 15)->at('13:00');// At 1 PM of every 1st and 15th of every month
    

    另一种方式在每个月的 1 号和 15 号午夜执行 Crontab

     $schedule->command('payments:create')->cron('0 5 1,15 * *');
    

    【讨论】:

    • 太棒了!谢谢
    • 如何在 laravel 5.1 上做到这一点
    • monthlyOn 只能在更高版本使用 5.1 不允许使用
    • $schedule->command('payments:create')->cron('0 5 1,15 * *');这将适用于所有 laravel,包括一个 5.1:检查我上面答案的“另一种方式”部分
    【解决方案2】:

    您可以使用 ->mondays() 到 ->sundays() 每周的特定日期。

    然后在一天中的特定时间使用 ->at('23:59')。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-29
      • 1970-01-01
      • 1970-01-01
      • 2017-03-24
      • 2013-07-24
      • 2017-02-23
      • 2019-01-10
      相关资源
      最近更新 更多