Crontabの改善点[閉じる]

Crontabの改善点[閉じる]

私のcrontabには31のcronjobがあり、最初の7つのcronjobが完了したら毎週日付を変更します。これらの手作業を減らす他の方法はありますか?

私は各cronjobに特定の日付を設定しようとしています。たとえば、15 00 1,12,22 * * ....

これは良い選択ですか?私の仕事を改善するにはいくつかの提案が必要です。

ありがとうございます。

編集:1日3回、毎週31のテストを実行したいと思います。下の画像は、最初の21のテストに対してcronjobを設定する方法を示しています。

00 00 * * 1 test run 1
00 09 * * 1 test run 2
00 17 * * 1 test run 3
00 00 * * 2 test run 4
00 09 * * 2 test run 5
00 17 * * 2 test run 6
00 00 * * 3 test run 7
00 09 * * 3 test run 8
00 17 * * 3 test run 9
00 00 * * 4 test run 10
00 09 * * 4 test run 11
00 17 * * 4 test run 12
00 00 * * 5 test run 13
00 09 * * 5 test run 14
00 17 * * 5 test run 15
00 00 * * 6 test run 16
00 09 * * 6 test run 17
00 17 * * 6 test run 18
00 00 * * 7 test run 19
00 09 * * 7 test run 20
00 17 * * 7 test run 21

日曜日には、残りの試験運営等の日程を計画いたします。

00 00 * * 1 test run 22
00 09 * * 1 test run 23
00 17 * * 1 test run 24
00 00 * * 2 test run 25
00 09 * * 2 test run 26
00 17 * * 2 test run 27
00 00 * * 3 test run 28
00 09 * * 3 test run 29
00 17 * * 3 test run 30
00 00 * * 4 test run 31
00 09 * * 4 test run 1
00 17 * * 4 test run 2
00 00 * * 5 test run 3
00 09 * * 5 test run 4
00 17 * * 5 test run 5

# (etc.)

ベストアンサー1

特定の開始時間に連続して31のテストを繰り返すには、スクリプトを使用して次に実行するタスクを追跡し、ファイルのシーケンス番号を使用します。

単一の永続 crontab エントリを使用してすべての時間を指定します。例:

0 0,9,17 * * * /home/paul/JobRotate >> /home/paul/JobRotate.log 2>&1

以下は、最新のジョブ番号を.seqファイルに保存し、存在しない場合に生成するサンプルスクリプトです。

#! /bin/bash --
#.. This is /home/paul/JobRotate.
fn="/home/paul/JobRotate.seq"
[[ -r "${fn}" ]] && read -r Seq < "${fn}"
(( ++Seq ))
printf '%d\n' $(( Seq % 31 )) > "${fn}"
/home/paul/kJob_${Seq}

これはジョブテストスクリプトの例です。

#! /bin/bash --
printf '%s\n' "I am kJob_17" >> /home/paul/JobRotate.log

フルパス名を使用してください。 cronはログインしないため、プロファイル(PATHを含む)はアクティブになりません。厳しい環境: これみんなcronは私にデフォルトのログインシェルも提供していません。

LANGUAGE=en_GB:en
HOME=/home/paul
LOGNAME=paul
PATH=/usr/bin:/bin
LANG=en_GB.UTF-8
SHELL=/bin/sh
PWD=/home/paul

「テスト実行x」の名前が示されているように標準でない場合は、インデックス配列またはシェルケースステートメントを使用してマッピングするか、ソフトリンクを介してアクセスできます。する正式な名前を持ってください。

おすすめ記事