Réponses:
0 8 * * 6 test $((10#$(date +\%W)\%2)) -eq 1 && yourCommand
date +%W
: numéro de semaine de l'année avec lundi comme premier jour de la semaine, aujourd'hui semaine 39
10#$(date +%W)
: convertir le date +W
nombre décimal et éviter la confusion d'analyse de la base du shell
$((39%2))
: opération modulo: le résultat est 0 (numéro de semaine pair) ou 1 (numéro de semaine impair), le résultat de cette semaine est 1, la semaine prochaine 0
test 1 -eq 1
: test arithmétique (égal), dans ce cas le résultat est booléen vrai
&& yourCommand
: Boolean AND: exécuté yourCommand
uniquement si le résultat de la commande précédente était booléen true
Notez que l'année peut avoir deux semaines impaires: 53 (cette année) et 1 (l'année prochaine)
0 8 * * 6 test $(($(date +\%W)\%2)) -eq 1 && yourCommand
$((10#$(date +%W)%2)) -eq 1 && echo OK
mes shell tente d'exécuter le résultat du calcul de la semaine: -bash: 1: command not found
. Un indice pourquoi il fait ça? Merci.
test
n'est pas un utilisateur c'est une commande. Essayez:test $((10#$(date +\%W)%2)) -eq 1 && echo odd || echo even
Ce que vous avez montré, c'est "chaque semaine". Alors le code est:
0 8 * * 6
Êtes-vous sûr de devoir l'exécuter toutes les deux semaines?
0 8 * * 6 expr `date +\%s` / 604800 \% 2 >/dev/null || yourCommand
echo $?
après avoir exécuté cette commande, pour voir son code de retour - c'est ce qui est important avec elle