Laravel命令每分钟都不起作用

时间:2016-01-25 18:58:22

标签: php date laravel command schedule

编辑: @Bogdan,这个剧本只执行一次,就在第二天开始前一个小时就开始了,这很奇怪,也是因为当天两次约会的start时间不同。但是,这两项任命都是在第二天确定的。

所以基本上我的脚本没有在下一个小时检查即将到来的约会,而只是为明天设定的约会,并在那些约会开始前一小时发送电子邮件。混乱。另外,如果以Y-m-d H:i格式检查时间,那么秒是不是很重要?或者我错过了什么?

OP:

我使用laravel cronjob和scheduler设置了一些命令。我得到了所有需要工作的命令,除了一个。我有一个约会数据库,我在那里存储约会到期的时间戳。使用命令,我想在约会到期前一小时发送电子邮件。为此,我使用以下命令:

$schedule->command('appointment:hourly')->everyMinute();

所以它每分钟运行一次。在我的命令中,我有以下内容:

$date = Carbon::now()->addHours('1')->format('Y-m-d H:i');

$appointments = Appointment::latest('start')->date($date)->get();

因此它将日期设置为now(),然后它会增加一个小时并检查数据库中的值。我的电子邮件永远不会发送(电子邮件脚本有效,因为我使用的是同一个脚本用于其他命令)。

我也尝试了以下内容:

$date = Carbon::now()->addHours('1')->format('Y-m-d H:i:s');

仍然没有。我的日期存储在数据库中,例如:

2016-01-25 09:00:00

所以它是否更好也检查以匹配秒,它应该工作。当我在视图中检查$date时,它会返回2016-01-25 09:00,例如。

任何指针都会受到赞赏。

顺便说一下,我的date()功能。它只是根据start列检查值:

public function scopeDate($query, $date)
{
    if($date)
    {
        return $query->whereDate('start', '=', $date);
    }
    else {
        return false;
    }
}

PS。我应该提一件事。昨天晚上11点准时,我从上面的命令收到了两封电子邮件,说从一个小时开始约会。那些是今天开始的约会,但它们不会在00:00开始。所以我想用上面的命令,它不会检查今天的约会。我感到很困惑,但还没有想到这一点。

1 个答案:

答案 0 :(得分:1)

这里有两件事需要考虑:

1。确保您在body { -webkit-transition: background-image 0.2s ease-in-out; transition: background-image 0.2s ease-in-out; } 文件中设置了正确的时区,因为这可能是在错误的时间发送约会通知电子邮件的原因。

2. 从执行cron作业到执行config/app.php语句的时间,时间可能与您预期的完全不同(这不是确定的,是可能会受到代码执行和/或服务器在执行时加载的影响。因此时间可能是Carbon::now()而不是09:00:01,在这种情况下,您的情况将不再是真实的(这是其偶尔工作的另一个原因)。

为了确保时差不影响条件,你应该检查当前时间一小时或更短的时间,这当然要求你设置某种< em> marker ,可以让您知道通知是否已发送。此外,由于09:00:00仅比较日期和时间字符串的日期部分,因此还需要处理检查时间。由于Eloquent没有提供任何方法,您可以将hourminute MySQL函数与whereDate结合使用,如下所示:

whereRaw