【发布时间】:2017-04-09 19:26:06
【问题描述】:
我应该对此有什么问题吗?
我正在午夜设置一个 cron 作业
0 0 * * * /usr/bin/php myscript.php
脚本设置为以 MySQL 时间戳格式定义前一天的日期。
$midnightyesterday2 = (new DateTime())->setTime(0, 0);
$midnightyesterday2->modify('-1 day');
$midnightyesterday = $midnightyesterday2->format("Y-m-d H:i:s");
回声输出:
2017-04-08 00:00:00
$endofdayyesterday2 = (new DateTime())->setTime(23, 59, 59);
$endofdayyesterday2->modify('-1 day');
$endofdayyesterday = $endofdayyesterday2->format("Y-m-d H:i:s");
回声输出:
2017-04-08 23:59:59
显然这个示例输出工作正常,因为我在 15:22:00 执行此操作。
如果脚本由于某种原因提前一点点运行,我是否只是偏执地认为在午夜设置 cron 作业可能会导致冲突甚至半秒。
有没有更好的方法来确保昨天的日期,并将脚本设置为恰好在午夜运行?
我需要它在午夜运行,因为脚本基于 MySQL lastmodified 时间戳,正如我的回声所暗示的那样,即使在 12:01 运行它也可能会在那一分钟内留下一些额外的行。
【问题讨论】:
-
你很好,你的 cron 作业只会在午夜运行一次,你完全不用担心。不过,真的,它是午夜还是任何时候都没有关系,它只运行一次。
-
让系统依赖于在午夜运行的作业似乎真的很危险。你应该想出另一种方法来实现你的目标。
-
@Evan Carslake :嗯,我知道它只会运行一次,但我担心的是,因为它在午夜运行,DateTime 可能会搞砸,我可能会得到重复。 @Gordon Linoff:因此这个问题:) 我想知道我是否可以在 DateTime 上增加 12 小时,然后将时间设置为
00:00:00或者是否有更好的方法 -
@BrianBruman 对,但我的意思是,午夜只出现一次,与任何其他时间相同。 00:00::00 与希望它只在 5 点钟 05:00:00 运行一次没有什么不同。午夜只持续那一秒,然后是 00:00:01。你很好……