Risposte:
0 8 * * 6 test $((10#$(date +\%W)\%2)) -eq 1 && yourCommand
date +%W
: numero della settimana dell'anno con il lunedì come primo giorno della settimana, oggi settimana 39
10#$(date +%W)
: converte il date +W
numero decimale ed evita la confusione dell'analisi della base della shell
$((39%2))
: operazione modulo: il risultato è 0 (numero settimana pari) o 1 (numero settimana dispari), il risultato di questa settimana è 1, settimana successiva 0
test 1 -eq 1
: test aritmetico (uguale), in questo caso il risultato è booleano true
&& yourCommand
: AND booleano: eseguito yourCommand
solo se il risultato del comando precedente era booleano true
Si noti che l'anno può avere due settimane dispari: 53 (quest'anno) e 1 (l'anno successivo)
0 8 * * 6 test $(($(date +\%W)\%2)) -eq 1 && yourCommand
$((10#$(date +%W)%2)) -eq 1 && echo OK
i miei tentativi di shell per eseguire il risultato del calcolo settimana: -bash: 1: command not found
. Qualche idea sul perché lo stia facendo? Grazie.
test
nessun utente è un comando. Prova:test $((10#$(date +\%W)%2)) -eq 1 && echo odd || echo even
Quello che hai mostrato è "ogni settimana". Quindi il codice è:
0 8 * * 6
Sei sicuro di doverlo eseguire ogni due settimane?
0 8 * * 6 expr `date +\%s` / 604800 \% 2 >/dev/null || yourCommand
echo $?
dopo aver eseguito quel comando, per vedere il suo codice di ritorno - questo è ciò che è importante con esso