解決策 1:
0 8 * * 6 test $((10#$(date +\%W)\%2)) -eq 1 && yourCommand
date +%W
:月曜日を週の最初の日とする年の週番号、今日は第 39 週
10#$(date +%W)
:date +W
を変換します 10 進数に変換し、シェル ベースの解析の混乱を回避します
$((39%2))
:モジュロ演算:結果は 0 (偶数週) または 1 (奇数週)、今週の結果は 1、来週は 0
test 1 -eq 1
:算術テスト (等しい)。この場合、結果はブール値の true です
&& yourCommand
:ブール値 AND:yourCommand
を実行 前のコマンドの結果が真偽値だった場合のみ
年には奇数週が 2 つあることに注意してください:53 (今年) と 1 (来年)
解決策 2:
あなたが示したのは「毎週」です。コードは次のとおりです。
0 8 * * 6
2 週間ごとに実行する必要がありますか?
0 8 * * 6 expr `date +\%s` / 604800 \% 2 >/dev/null || yourCommand