Odpowiedzi:
0 8 * * 6 test $((10#$(date +\%W)\%2)) -eq 1 && yourCommand
date +%W
: numer tygodnia z poniedziałkiem jako pierwszym dniem tygodnia, dziś tydzień 39
10#$(date +%W)
: przekonwertuj na date +W
liczbę dziesiętną i unikaj pomyłki podczas analizowania bazy powłoki
$((39%2))
: działanie modulo: wynik to 0 (parzysty numer tygodnia) lub 1 (nieparzysty numer tygodnia), w tym tygodniu wynik to 1, następny tydzień 0
test 1 -eq 1
: test arytmetyczny (równy), w tym przypadku wynik ma wartość logiczną prawda
&& yourCommand
: Boolean AND: uruchom yourCommand
tylko, jeśli wynik poprzedniego polecenia był logiczny true
Pamiętaj, że rok może mieć dwa nieparzyste tygodnie: 53 (w tym roku) i 1 (w przyszłym roku)
0 8 * * 6 test $(($(date +\%W)\%2)) -eq 1 && yourCommand
$((10#$(date +%W)%2)) -eq 1 && echo OK
moje prób powłoki wykonać wynik obliczeń tygodniu: -bash: 1: command not found
. Wszelkie wskazówki, dlaczego to robi? Dzięki.
test
nie jest użytkownikiem, to polecenie. Spróbuj:test $((10#$(date +\%W)%2)) -eq 1 && echo odd || echo even
To, co pokazałeś, to „co tydzień”. Zatem kod to:
0 8 * * 6
Czy na pewno musisz uruchamiać go co dwa tygodnie?
0 8 * * 6 expr `date +\%s` / 604800 \% 2 >/dev/null || yourCommand
echo $?
po uruchomieniu tego polecenia, aby zobaczyć jego kod powrotu - to jest z nim ważne