06:05から22:05まで15分ごとにcronジョブを開始します

06:05から22:05まで15分ごとにcronジョブを開始します

06:05 から 22:05 まで 15 分ごとに cron ジョブを実行する必要があります。

0 5/15 6-22 * * *

次の構文には 22:35 と 22:50 が含まれます。

これを実現する方法をご存知ですか? これは 1 行で可能ですか、それとも複数行を設定する必要がありますか?

答え1

1つのcronlineで可能ですが、トリックが必要です

SHELL=/bin/bash
5-50/15 6-22 * * * [[ '2220 2235 2250' =~ "$(date +\%H\%M)" ]] || /path/to/script

またはsh(bashと)

SHELL=/bin/sh
5-50/15 6-22 * * * case "$(date +\%H\%M)" in 2220|2235|2250) ;; *) /path/to/script;;esac

crontab に必要なパーセント (%) 文字のバックスラッシュ エスケープに注意してください。

答え2

xmodulo による「Cron Job」は CC BY 2.0 ライセンスです。

*/15 6-22 * * * /path/to/script

または

5,20,35,50 6-22 * * *  /path/to/script

フィールドにはアスタリスク (*) を使用できます。これは常に「first-last」を表します。数値の範囲も許可されます。範囲はハイフンで区切られた 2 つの数値です。指定された範囲は包括的です。たとえば、「hours」エントリの 8-11 は、8、9、10、11 時に実行を指定します。

リストは許可されます。リストは、コンマで区切られた一連の数字 (または範囲) です。例: "1,2,5,9"、"0-4,8-​​12"。

ステップ値は範囲と組み合わせて使用​​できます。範囲の後に "" を付けると、範囲内で数値のスキップを指定します。たとえば、時間フィールドで "0-23/2" を使用すると、1 時間おきにコマンドを実行するように指定できます (V7 標準の代替は "0,2,4,6,8,10,12,14,16,18,20,22" です)。ステップはアスタリスクの後にも使用できます。したがって、「2 時間ごと」と指定する場合は、"*/2" を使用します。

「月」および「曜日」フィールドには名前も使用できます。特定の日または月の最初の 3 文字を使用します (大文字と小文字は区別されません)。名前の範囲またはリストは使用できません。

「6 番目」のフィールド (行の残り) は、実行するコマンドを指定します。改行または % 文字までの行のコマンド部分全体が、/bin/sh または cronfile の SHELL 変数で指定されたシェルによって実行されます。コマンド内のパーセント記号 (%) は、バックスラッシュ () でエスケープしない限り、改行文字に変更され、最初の % の後のすべてのデータは標準入力としてコマンドに送信されます。

注: コマンドの実行日は、月日と曜日の 2 つのフィールドで指定できます。両方のフィールドが制限されている場合 (つまり、* でない場合)、コマンドはどちらかのフィールドが現在の時刻と一致したときに実行されます。たとえば、「30 4 1,15 * 5」と指定すると、毎月 1 日と 15 日、および毎週金曜日の午前 4:30 にコマンドが実行されます。

答え3

個人的には、これを 2 行に分割します。

5-50/15 6-21 * * * /path/to/script
5       22   * * * /path/to/script

最初の路線は 0605-2150 をカバーし、2 番目の路線は 2205 の追加運行用です。

本当に 1 行で済ませたい場合は、不正確なジョブ開始時間に対応できるように不正確なチェックを行うことをお勧めします。

5-50/15 6-22 * * * [[ $(date +"\%-H\%M") -le 2210 ]] && /path/to/script

答え4

少し遅くなりましたが、完全性のために、CronBuddy.com で任意の cron 式の将来の実行時間のリストを取得できます。これは、何が起こるかを確認する簡単な方法です。

関連情報