Laravel 调度程序自定义 Cron 表达式不起作用

Posted

技术标签:

【中文标题】Laravel 调度程序自定义 Cron 表达式不起作用【英文标题】:Laravel Scheduler Custom Cron Expression Not Working 【发布时间】:2017-11-04 15:43:09 【问题描述】:

我有两个 laravel 调度程序表达式调用,如下所示:一个带有自定义 cron 表达式,每 3 小时运行一次,另一个每小时运行一次。

每次,每小时调度程序都会运行,但不会运行自定义 cron 。它曾经工作,但停止工作。如果我直接从任何函数调用 Poster1::post(),它仍然有效。

能否向我解释为什么这不起作用,早先?

第一调度器:

    $schedule->call(function () 
        try 
            Poster1::post();                
         catch (Exception $e) 

        
    )->cron('0 */3 * * *');

第二个调度器:

    $schedule->call(function () 
        try 
            Poster2::post();                
         catch (Exception $e) 

        
    )->hourly();

【问题讨论】:

很难说没有看到其余的代码。您可能会做的实际上是在(当前为空的)catch 块中调试某些内容。此外,try 之前的调试可以告诉您是否甚至触发了作业。 通过在运行时添加日志来验证 cron 作业是否首先被执行。不妨在 catch 块中添加一个,看看是否有任何异常被抛出。 【参考方案1】:

您可以使用 Laravel 调度程序函数每 3 小时运行一次。

$schedule->call(function () 
    try 
        Poster1::post();                
     catch (Exception $e) 

    
)
->hourly()
->when(function()  
    return intval(date('H')) % 3 === 0;
);

【讨论】:

谢谢你的提示,我会试试这个并报告:) 很高兴我能帮上忙。考虑将此答案标记为解决方案,以便其他用户也可以找到它。 :) 效果很好!谢谢!

以上是关于Laravel 调度程序自定义 Cron 表达式不起作用的主要内容,如果未能解决你的问题,请参考以下文章

laravel5.5任务调度

Laravel 队列(数据库驱动程序)+ Cron 作业(任务调度程序)堆叠并且在服务器崩溃后不再发送

使用 aws eb 和 laravel 任务调度的 Cron 作业

laravel 任务调度-即定时任务使用

石英调度程序中每30秒的cron表达式?

Laravel调度程序未按预期工作