Laravel日程安排-仅EveryMinute有效

时间:2018-12-30 23:58:14

标签: php laravel cron

似乎只有everyMinute()和cron('* * * * *')对我有用。任何其他方法(例如,everyFiveMinutes,everyTenMinutes,daily,dailyAt等)都无法使用,并且总是返回“没有计划的命令可以运行”。我的cron条目始终是* * * * *,因此其他方法也应该正常工作吗?是的;我实际上已经尝试过等待其他方法,包括每天,不包括每年的:P

Cron条目:* * * * * /opt/alt/php72/usr/bin/php /home/retracted/domains/retracted/artisan schedule:run >> /dev/null 2>&1

计划条目:

$schedule->call(function () {
    $stat = new Stat();
    $stat->users = User::count();
    $stat->reviews = Review::count();
    $stat->scholen = School::count();
    $stat->save();
})->daily();

所以我的问题是:为什么其他方法不起作用?如何使其他方法(特别是Daily())起作用?

3 个答案:

答案 0 :(得分:0)

因此,首先您必须在正确的每一分钟进行一次cronjob。通过该行,您可以运行Laravel调度程序。

所以我不知道调度程序代码,但是代码可能只在那一分钟而不是向后运行。

因此,如果需要5分钟的cronjob,则必须每分钟运行一次调度程序,然后在调度程序任务中定义持续时间。

$schedule->call(function () {
    $stat = new Stat();
    $stat->users = User::count();
    $stat->reviews = Review::count();
    $stat->scholen = School::count();
    $stat->save();
})->everyFiveMinutes();

因此,使用功能->everyFiveMinutes();可以每五分钟运行一次调度程序。

答案 1 :(得分:0)

要使laravel自定义cron作业正常工作,您必须执行以下操作:

  1. 首先通过执行命令“ crontab”来设置每分钟的cron -e ”,然后添加以下行* * * * * php /var/www/html/crontutorial/artisan schedule:run >> /dev/null 2>&1
  2. app / config.php 上配置适当的时区,例如'timezone' => 'Europe/Berlin',
  3. 创建要在特定时间执行的自定义命令。 如果您不知道如何创建自定义命令,请看看 在laravel cronjob scheduling tutorial

  4. 通过添加
  5. app / Console / Kernel.php 中计划自定义标签 以下代码行

    protected function schedule(Schedule $schedule)
        {
            $schedule->command('my:customcommand')
                    ->cron('01 13 * * *');
        }
    

    cron将使用 app / config.php 中的时区配置每天运行1.13pm。

答案 2 :(得分:0)

您尝试指定时区吗?检查我的项目中的以下工作片段:

protected function schedule(Schedule $schedule)
    {
        try{

            $schedule->call(function (){
                (new MTSnapshot)->createSnapshot();
            })->timezone('Asia/Kolkata')->dailyAt('23:57');

            $schedule->call(function (){
                (new MTTransaction)->schedulerStatus();
            })->hourly();

            $schedule->call(function (){
                (new MTTransaction)->syncPendingTransactions();
                (new MTCommission)->processPendingCommissions();
            })->twiceDaily(1, 16); 

        } catch(\Throwable $t){
            Log::emergency($t);
        }

    }