70分または210分ごと、つまり>60分ごとに実行されるようにcron式を設計する方法はありますか。これを検索しようとしましたが、見つかりませんでした。
私はついに、5分ごと(または最適な繰り返し時間)に呼び出される必要な時間チェックを実行するラッパースクリプトを使用しました。
cron式でそのようなタスクを実行する方法は?
70分または210分ごと、つまり>60分ごとに実行されるようにcron式を設計する方法はありますか。これを検索しようとしましたが、見つかりませんでした。
私はついに、5分ごと(または最適な繰り返し時間)に呼び出される必要な時間チェックを実行するラッパースクリプトを使用しました。
cron式でそのようなタスクを実行する方法は?
この答えはこれとこれとかなり同じです
毎分 cron を実行するn
場合は、次の 2 つのケースを考慮する必要があります。
n
分 (60 は で割り切れn
ます)n
から 1 分ごとYYYY-MM-DD HH:MM:00
後者はOPのケースをカバーしていますが、一般的なままにするために、両方のケースを提示します。
n
分 (60 は で割り切れn
ます)n=1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30
これは ( )に有効です
このために、範囲とステップ値の定義の組み合わせを使用します。
man 5 crontab
:ステップ値は、範囲と組み合わせて使用できます。範囲の後に を/<number>
指定すると、範囲内での数値の値のスキップが指定されます。たとえば0-23/2
、「hours」フィールドで を使用して、1 時間おきにコマンドを実行するように指定できます (V7 標準の代替手段は です0,2,4,6,8,10,12,14,16,18,20,22
)。アスタリスクの後にステップ値を指定することもできるため、ジョブを 2 時間ごとに実行するように指定する場合は、 を使用できます*/2
。
次の例を参照してください。
# Example of job definition:
# .----------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7)
# | | | | |
# * * * * * command to be executed
m/n * * * * command1
ここでcommand1
は、m から 59 まで n 分ごとに実行されます。
この意味は :
m<=n
、それらは常にn
分間隔になります。例えば。m=2,n=10
:: ジョブは数分で実行されます2,12,22,32,42,52
m>n
常に分間隔になります。n
例えば。m=12,n=10
:: ジョブは分単位で実行され
12,22,32,42,52
ます。ここでは、秒52
と分の間に 20 分のジャンプがあり12th
ます。注:n
が60 を完全に分割しない場合、問題が発生することがはっきりとわかります。例えば。m=0,n=11
で実行される
0,11,22,33,44,55
ため、次の実行まで 5 分しかありません。
n
分YYYY-MM-DDTHH:MM:00
毎分 cron を実行したい場合n
、これを cron できれいに実行することはできませんが、可能です。これを行うには、テストが時間をチェックする cron にテストを配置する必要があります。これは、UNIX タイム スタンプ、つまり からの合計秒数を調べるときに行うのが最適1970-01-01 00:00:00 UTC
です。McFly が Riverdale に到着した瞬間から始めたいとしましょう:
% date -u -d '2015-10-21 07:28:00' +%s
1445412480
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7)
# | | | | |
# * * * * * command to be executed
* * * * * mintestcmd "2015-10-21 07:28:00" 7 && command1
*/10 * * * * mintestcmd "2015-10-21 07:00:00" 70 && command2
*/30 * * * * mintestcmd "2015-10-21 07:00:00" 210 && command3
としてmintestcmd
定義された
#!/usr/bin/env bash
starttime=$(date -d "$1" "+%s")
# return UTC time
now=$(date "+%s")
# get the amount of minutes
delta=$(( (now - starttime) / 60 ))
# set the modulo
modulo=$2
# do the test
(( delta >= 0 )) && (( delta % modulo == 0))
上記の例には、次のものがあります。
command1
2015-10-21 07:28:00
、2015-10-21 07:35:00
、2015-10-21 07:42:00
、2015-10-21 07:49:00
、 ...に 7 分ごとに実行されます。command2
2015-10-21 07:00:00
以降、70分間隔で運行。70 は 10 で割り切れ、開始時刻は完全に正時に始まるため、cron を 10 分ごとに実行するように設定できます。command3
以降210分間隔で運行2015-10-21 07:00:00
。210 は 30 で割り切れ、開始時刻は完全に正時に始まるため、cron を 30 分ごとに実行するように設定できます。注意: UNIX 時間は UTC で表示されます。夏時間の影響を受ける別のタイムゾーンで cron を実行する場合は、2 時から 3 時の間にコマンドを実行しないことをお勧めします。これにより、コマンドがスキップされるか、コマンドが 2 回実行される可能性があります (時間が進むか戻るかによって異なります)。
注意: UNIX時間はうるう秒の影響を受けません
備考: cron
1 秒未満の精度はありません