k8s cronjob 内の単一タスクの複数のスケジュール

k8s cronjob 内の単一タスクの複数のスケジュール

警告: こちら側では k8s の初心者です。

k8s cronjob で設定されるタスクを実行する必要があります。45 分ごとに実行する必要があります。次のコードではschedule機能しません:

0/45 * * * *

なぜなら、 ではなく に実行されX:00X:45に続いて に実行されるX+1:00からですX+1:30。そのため、代わりに複数のスケジュール ルールを設定する必要があるかもしれません。

0,45 0/3 * * *
30   1/3 * * *
15   2/3 * * *

複数のスケジュールを設定することは可能でしょうか?シングルCronJob の定義、または各 CronJob が各行を処理するように複数の CronJob を設定する必要があるかどうか。

詳細は、https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/cron-job-v1/ を参照してください。

アップデート: 1 つの yaml ファイルに複数のマニフェストを記述することが可能なので、3 つのマニフェストで動作する可能性があると読みました... ただし、1 つのマニフェストでそれが可能かどうかを知れば素晴らしいと思います。

答え1

*/45 を試してください。マニュアルによると、0/45 は 0 が 45 個おきに続くことを意味します...

答え2

crontab の仕様が不完全または曖昧な場合は、実際に何を行うのかを調べることでドキュメントが明確になります。すべてのテストは Linux Mint 19.3 (crontab は POSIX 準拠) で実施されました。

0/40 * * * * date >> Cron.log

crontab -e は、上記の 1 行の crontab も許可しません。0 は特定の分です。これにスキップを設定するのは意味がありません。次のエラーがスローされます。

"/tmp/crontab.4BQ7AN/crontab":0: bad minute
errors in crontab file, can't install.
Do you want to retry the same edit? (y/n) 

対照的に

*/40 * * * * date >> Cron.log

* は 0、1、2、...、59 のリストを表すため、このバージョンは受け入れられます。スキップにより、これが 0 と 40 に削減されます。

範囲とステップ構造の効果を示すことを目的とした crontab を作成しました。

$ crontab -l
#.. Crontab to illustrate ranges and steps.

#.. Every 20 mins from 0: 0, 20, 40.
*/20       13,14 * * * ~/Stamp 'Line  4:: */20'

#.. Every 20 minutes from 5: 5, 25, 45.
5-59/20    13,14 * * * ~/Stamp 'Line  7:: 5-59/20'

#.. Every 7 minutes from 9 to 35: 9, 16, 23, 30.
9-35/7     13,14 * * * ~/Stamp 'Line 10:: 9-35/7'

#.. Every 13 minutes from 33 to 59: 33, 46, 59.
33-59/13   13,14 * * * ~/Stamp 'Line 13:: 33-59/13'

#.. Once only.
14-14/2    13,14 * * * ~/Stamp 'Line 16:: 14-14/2'

#.. Once only.
11-59/999  13,14 * * * ~/Stamp 'Line 19:: 11-59/999'

~/Stamp は、実行された時間と crontab ファイルからの分の値を記録するシェル スクリプトです。

$ cat ~/Stamp
#! /bin/bash
#: Stamp: demonstrate crontab processing.

Log="./133000.cronLog"
printf >>"${Log}" '%(%T)T cron time spec %s\n' -1 "${1}"

13:35 に crontab をインストールし、これらのタスクをログに記録しました。13、14 の時間の値が原因で、1 時間の境界を超えて実行されたため、14:59 にログ記録が停止しました。時間、曜日、月、曜日の列は同じように機能すると思いますが、90 分間のテストで十分です。

paul@paul-RV415-RV515 ~ $ tail -F 133000.cronLog
tail: cannot open '133000.cronLog' for reading: No such file or directory
tail: '133000.cronLog' has appeared;  following new file
13:40:01 cron time spec Line  4:: */20
13:45:01 cron time spec Line  7:: 5-59/20
13:46:01 cron time spec Line 13:: 33-59/13
13:59:01 cron time spec Line 13:: 33-59/13
14:00:01 cron time spec Line  4:: */20
14:05:01 cron time spec Line  7:: 5-59/20
14:09:01 cron time spec Line 10:: 9-35/7
14:11:01 cron time spec Line 19:: 11-59/999
14:14:01 cron time spec Line 16:: 14-14/2
14:16:01 cron time spec Line 10:: 9-35/7
14:20:01 cron time spec Line  4:: */20
14:23:01 cron time spec Line 10:: 9-35/7
14:25:01 cron time spec Line  7:: 5-59/20
14:30:01 cron time spec Line 10:: 9-35/7
14:33:01 cron time spec Line 13:: 33-59/13
14:40:01 cron time spec Line  4:: */20
14:45:01 cron time spec Line  7:: 5-59/20
14:46:01 cron time spec Line 13:: 33-59/13
14:59:01 cron time spec Line 13:: 33-59/13
^C
paul@paul-RV415-RV515 ~ $ 

関連情報