これに問題がありますか?私は正確に真夜中Yesterdays正確な真夜中の日付をPHPで取得する
0 0 * * * /usr/bin/php myscript.php
でcronジョブを設定しています
スクリプトは、MySQLのタイムスタンプ形式で前日の日付を定義するために設定されています。
$midnightyesterday2 = (new DateTime())->setTime(0, 0);
$midnightyesterday2->modify('-1 day');
$midnightyesterday = $midnightyesterday2->format("Y-m-d H:i:s");
エコー出力:
2017年4月8日午前0時00分○○秒
$endofdayyesterday2 = (new DateTime())->setTime(23, 59, 59);
$endofdayyesterday2->modify('-1 day');
$endofdayyesterday = $endofdayyesterday2->format("Y-m-d H:i:s");
エコー出力:
2017年4月8日23時59分59秒
私は夜03時22分00秒でこれをやっているので、明らかに、このサンプル出力は正常に動作しています。
真夜中にクローンジョブを設定すると、何らかの理由でスクリプトが早い段階で早く実行されても、半分の時間でも競合が発生する可能性があります。
正確に真夜中に実行するようにスクリプトを設定して、yesterdaysの日付を確実にする良い方法はありますか?
私のエコーが示すように、スクリプトがMySQL lastmodified
タイムスタンプに基づいており、12:01にそれを実行しても、その分に追加の行が残ってしまう可能性があるため、正確に真夜中に実行する必要があります。スクリプトが正確に深夜(0時00分00秒)で動作するように設定されている、
は覚えておいてください:
あなたのうまくいけば、あなたのcronの仕事は一度だけ実行され、深夜には、あなたはそれについて全く心配する必要はありません。しかし、真夜中でもいつでも、それは一度だけ実行されます。 –
システムを真夜中に稼働しているジョブに依存させるのは本当に危険です。あなたはあなたの目標を達成する別の方法を考えるべきです。 –
@ Evan Carslake:うまくいきませんが、それは一度だけ実行されることはわかっていますが、私の心配は、深夜に実行されているため、DateTimeが壊れて重複する可能性があります。 @Gordon Linoff:したがってこの質問:DateTimeに12時間を追加し、時間を00:00:00に設定するか、より良い方法があるかどうかを尋ねるのですか? –