Das ist elegant! Wie Sie bereits bemerkt haben, gibt es am 53. Samstag im Jahr immer noch einen Eckfall, der alle vier Jahrhunderte ungefähr siebzig Jahre dauern wird.
MadHatter
@ Cyrus, danke für deine Antwort, aber wenn ich * * * * 5 test $ (($ (Datum +% W)% 2)) -eq 1 && /u02/restore/scripts/test.sh schreibe, funktioniert das Skript nicht laufe aber wenn ich schreibe * * * * 5 /u02/restore/scripts/test.sh Skript läuft. Warum funktioniert dein Ausdruck nicht? Ich habe nur die Fälle getestet. Und festgestellt, dass das irgendwie nicht funktioniert.
Kupa
1
Mein Fehler. Cron interpretiert% als Zeilenumbruch. Entkomme beiden% mit einem \ in deinem Cronjob:0 8 * * 6 test $(($(date +\%W)\%2)) -eq 1 && yourCommand
Cyrus
Es tut mir leid, diese alte Frage zurückzubringen, aber sie hat bei mir nicht funktioniert. Wenn ich versuche, $((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.
Jhuet
3
@jhuet: testist kein Benutzer, es ist ein Befehl. Versuchen Sie:test $((10#$(date +\%W)%2)) -eq 1 && echo odd || echo even
Cyrus
4
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?
Es ist besser, das zu verwenden, was Cyrus gegeben hat - $ (($ (Datum +% W)% 2)) "W" steht für eine Wochennummer im Jahr. Von null bis 53. Wenn es durch zwei geteilt werden kann, dann ist es Ihre "jede Sekunde" Woche. Cronjob läuft also jede Woche, aber der 'expr' führt den Befehl yourCommand nur aus, wenn die
Wochennummer
Wenn ich test $ (($ (Datum +% W)% 2)) -eq 1 in der Befehlszeile ausführe, wird nichts zurückgegeben. Warum?
Kupa
1
Führen Sie es einfach aus, echo $?nachdem Sie diesen Befehl ausgeführt haben, um seinen Rückkehrcode zu sehen - das ist wichtig
0 8 * * 6 test $(($(date +\%W)\%2)) -eq 1 && yourCommand
$((10#$(date +%W)%2)) -eq 1 && echo OK
meine Shell auszuführen , versucht ich, das Ergebnis der Wochenberechnung auszuführen :-bash: 1: command not found
. Irgendein Hinweis, warum es das tut? Vielen Dank.test
ist 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:
Sind Sie sicher, dass Sie es alle zwei Wochen ausführen müssen?
quelle
echo $?
nachdem Sie diesen Befehl ausgeführt haben, um seinen Rückkehrcode zu sehen - das ist wichtig