回答:
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
前のコマンドの結果がブールtrueの場合にのみ実行
年は2つの奇数週になる可能性があることに注意してください:53(今年)と1(翌年)
0 8 * * 6 test $(($(date +\%W)\%2)) -eq 1 && yourCommand
$((10#$(date +%W)%2)) -eq 1 && echo OK
、シェルは週の計算結果を実行しようとします-bash: 1: command not found
。それがなぜそれをしているのか手がかりはありますか?ありがとう。
test
ユーザーではなく、コマンドです。試してみる:test $((10#$(date +\%W)%2)) -eq 1 && echo odd || echo even
あなたが示したことは「毎週」です。次に、コードは次のとおりです。
0 8 * * 6
2週間ごとに実行する必要がありますか?
0 8 * * 6 expr `date +\%s` / 604800 \% 2 >/dev/null || yourCommand
echo $?
そのコマンドを実行した直後に実行して、その戻りコードを確認してください。それが重要なことです