2週間ごとにクローンジョブを実行するようにスケジュールできますか?

2週間ごとにクローンジョブを実行するようにスケジュールできますか?

2週間ごとに実行するようにクローンジョブをスケジュールする方法はありますか?

(私が考えることができる1つの方法は、crontab2つの「日付」項目を追加することです...)

答え1

いいえ、cronは曜日、1月の日付、月だけを知っています。

月に2回固定された日付(1日と16日など)でコマンドを実行するのは簡単です。

42 4 1,16 * *  do_stuff

隔週でコマンドを実行するのは別の話です。あなたができる最善の方法は、毎週コマンドを実行し、隔週で何もしないようにすることです。 Linuxでは、エポック()以降の秒数を1週間の秒date +%s数で割ることで、週間のロールオーバーパリティ値を取得できます。 crontabでは%エスケープが必要です(cronは%コマンドを実行する前に改行されます)。

42 4 * * 1  case $(($(date +\%s) / (60*60*24*7))) in *[02468]) do_stuff;; esac

答え2

cron2週間ごと(2週間ごと)ジョブを直接実行することはできません。ただし、タスクの主要部分を隔週で実行することは非常に簡単です。 @Gillesは1つのソリューションを提供しました。ここに別の解決策があります。

42 4 * * 1    test 1 -eq $(($(date +\%g) & 1)) && do_stuff...

このdate +%gコマンドは現在の週数(年の週数)を返し、ビットAND演算は1または0を返します。その後、実際のジョブを実行できるかどうかを判断するために使用されます。

パーセント記号に対する同じ警告%:特別に扱われないcrontabように、項目内でエスケープする必要があります。cron

答え3

パーティーに遅れていることはわかりますが、誰もが問題に対する1つまたは2つの解決策を望んでいます...

日曜日を除いてOPと同じことをしたいので、この投稿を見つけました。

@user140906には、このコードスニペットを実行するときに観察できる有効な懸念があります。

for n in $(seq 17 33); do ncal -A1 -bw dec 20${n}; done

最初は6年ごとに繰り返されるようでした。みんな確認してないよ! :-)

それからこれを見つけました。協会これは、動作する必要がある@gilles-so-stop-being-evilに似た2つの解決策を提供します。最も明確な解決策は次のとおりです。

#!/bin/bash

# a file marking the state on disk
mark_file=$HOME/.job-run-marker-1

# check whether the job run last time it is invoked
if [ -e $mark_file ] ; then
  rm -f $mark_file
else
  touch $mark_file
  exit 0
fi

# job command is here

たとえば、crontab エントリを追加します。

0 2 * * 2 my_script

複数の項目で使用するように簡単に調整できます(ハードコーディングではなくcrontab値を渡す)。または、いくつかの魔法を使用して同じロジックをmark_file拡張して、ファイルのIDと状態/それぞれを表す/削除/追加行を追加します。ジョブが実行されました。IDgrepawksed

とにかく、これが誰かに、たぶん将来に私にも役立つことを願っています!

関連情報