Antworten:
0 8 * * 6 test $((10#$(date +\%W)\%2)) -eq 1 && yourCommand
date +%W: Woche Nummer des Jahres mit Montag als erstem Wochentag, heute Woche 39
10#$(date +%W): Konvertieren Sie die date +WDezimalzahl und vermeiden Sie Verwirrung beim Parsen der Shell-Basis
$((39%2)): modulo operation: Ergebnis ist 0 (gerade Wochennummer) oder 1 (ungerade Wochennummer), dieses Wochenergebnis ist 1, nächste Woche 0
test 1 -eq 1: arithmetischer Test (gleich), in diesem Fall ist das Ergebnis boolean true
&& yourCommand: Boolean AND: yourCommandNur ausführen , wenn das Ergebnis des vorherigen Befehls boolean true war
Beachten Sie, dass das Jahr zwei ungerade Wochen haben kann: 53 (dieses Jahr) und 1 (nächstes Jahr)
0 8 * * 6 test $(($(date +\%W)\%2)) -eq 1 && yourCommand
$((10#$(date +%W)%2)) -eq 1 && echo OKmeine Shell auszuführen , versucht ich, das Ergebnis der Wochenberechnung auszuführen : -bash: 1: command not found. Irgendein Hinweis, warum es das tut? Vielen Dank.
testist kein Benutzer, es ist ein Befehl. Versuchen Sie:test $((10#$(date +\%W)%2)) -eq 1 && echo odd || echo even
Was Sie gezeigt haben, ist "jede Woche". Dann lautet der Code:
0 8 * * 6
Sind Sie sicher, dass Sie es alle zwei Wochen ausführen müssen?
0 8 * * 6 expr `date +\%s` / 604800 \% 2 >/dev/null || yourCommand
echo $?nachdem Sie diesen Befehl ausgeführt haben, um seinen Rückkehrcode zu sehen - das ist wichtig