Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel Scheduler和Cron-Laravel如何知道不运行基于daily()、hourly()等的计划作业_Laravel_Cron - Fatal编程技术网

Laravel Scheduler和Cron-Laravel如何知道不运行基于daily()、hourly()等的计划作业

Laravel Scheduler和Cron-Laravel如何知道不运行基于daily()、hourly()等的计划作业,laravel,cron,Laravel,Cron,在Laravel中,在我的内核中,我有: protected $commands = [ Commands\SendRenewEmails::class, ]; /** * Define the application's command schedule. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(S

在Laravel中,在我的内核中,我有:

protected $commands = [
    Commands\SendRenewEmails::class,
];

/**
 * Define the application's command schedule.
 *
 * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
 * @return void
 */
protected function schedule(Schedule $schedule)
{
    // $schedule->command('inspire')
    //          ->hourly();
    $schedule->command('renew:emails')
        ->daily();
}
如果我通过Artisan手动运行此功能,则所述功能“续订:电子邮件”将正常工作

在我的crontab中,我有:

* */8 * * * cd /path-to-my-project && php artisan schedule:run >> /dev/null 2>&1
我必须每8小时运行一次,而不是在*****每分钟运行一次,因为这是用于测试的实时任务,只是为了确保任务不会每分钟运行一次

那么,Laravel如何知道何时在内核上运行日常作业,以及何时发生

从这个设置来看,它似乎是Laravel中cronjobs的基本设置,但要每分钟而不是每8小时运行一次,我看不到任何日志,数据库中也没有表来跟踪这一点

因此,如果我将cron设置为*****,Laravel怎么知道不需要每分钟运行计划的作业,仅仅因为我已将->每日;在工作结束时

当我每天;,具体时间是什么时候?具体什么时候是每小时

TL;博士:
Laravel如何知道,如果不应该再次运行相同的作业,例如,使用daily;规则这些信息存储在哪里?我怎样才能确定每天都有规律的工作;如果我的cronjobs std:out的php artisan schedule:run every minute?

在后台,Laravel调度程序用于确定命令或作业是否计划在调用schedule:run的给定分钟运行

您计划的每个任务都转换为一个,然后传递到包中。然后对该表达式运行一个名为isDue的方法,以确定它是否应该运行。因此,如果您将任务设置为每小时运行一次,那么isDue将在一小时的顶部生成true,而Laravel将在cron周期内执行该任务

因此,信息不需要存储在任何地方,因为确定是动态进行的

这也可能导致您想知道,如果您有一个长时间运行的任务,可能需要比间隔更长的时间,那么会发生什么情况。这就是没有重叠的地方。调用时,它会创建一个称为互斥体的对象,这类似于任务最初运行时的“锁”,有关详细信息,请参见。如果子序列周期中的特定任务已经存在互斥锁,则表示该任务当前正在另一个周期中运行,不应在此周期中再次触发

互斥锁存储在哪里?简单:Laravel将它们存储在缓存中,当完成一个互斥任务时,互斥从缓存中删除。因此,这种循环还在继续

我可以在这里更详细地讨论,但我认为这在很大程度上回答了你的问题