Ich verwende Rsnapshot für Backups (Linux CentOS 6).
Hier ist mein /etc/cron.d/rsnapshot
:
30 11 * * * root /usr/bin/rsnapshot nowandthen > /backups/rsnapshot_cron.txt 2>&1
15 11 * * 4 root /usr/bin/rsnapshot weekly > /backups/rsnapshot_cron.txt 2>&1
00 11 24-31 * 4 root /usr/bin/rsnapshot monthly > /backups/rsnapshot_cron.txt 2>&1
Die monatliche Sicherung sollte jeden letzten Donnerstag im Monat durchgeführt werden.
Die monatliche Sicherung wird jedoch heute, Donnerstag, 18.02.2016, um 11:00 Uhr ausgeführt. Heute ist nicht der letzte Donnerstag im Monat.
Was ist los mit meiner Crontab?
date
? Irgendwas relevantes in vongrep CRON /var/log/syslog
?crontab
Dateien gibt: Neben/etc
Einträgen gibt es auch eine für jeden Benutzer, einschließlichroot
. Unabhängig davon wird Ihr Skript nicht das tun, was Sie möchten: Wenn der letzte Tag eines 31-Tage-Monats ein Donnerstag ist, wird er sowohl am 24. als auch am 31. ausgeführt. Wenn der letzte Tag im Februar ein Mittwoch ist, wird er überhaupt nicht ausgeführt.Antworten:
Laut dieser Site bedeutet Ihre Zeichenfolge "Um 11:00 Uhr am 24., 25., 26., 27., 28., 29., 30. und 31. jedes Monats und jeden Do." (meine Betonung). Wenn die Seite korrekt ist, würde dies erklären, warum sie am 18. lief.
Der Beispieleintrag
man 5 crontab
für die Ausführung am 2. Samstag lautet:(dh jeden Tag der zweiten Woche ausführen und im Rahmen des Befehls nach dem Wochentag suchen) - Dies unterstützt die Ansicht, dass der Wochentag ein zusätzlicher, alternativer Filter und keine weitere Qualifikation ist, obwohl die Handbuchseite dies nicht schafft klar.
In Ihrem Fall würde ich also Folgendes verwenden:
Überprüfen Sie, ob Ihre
date
Unterstützung-d 'next Thursday'
: Wenn ja, können Sie die eher einfachere verwenden:Dies wird jeden Donnerstag ausgeführt und überprüft, ob das Datum in der Woche (604800 Sekunden) ab jetzt im selben Monat liegt. Andernfalls muss es der letzte Donnerstag sein, damit der Sicherungsbefehl ausgeführt wird.
quelle
-d "next thursday" +%m
sodass Sie einen verschachtelten Unterbefehl überspringen können.bash
Ubuntu getestet und es war kein Escape-Vorgang erforderlich, obwohl ich ihn nicht eingecheckt habecrontab
, da das Testen zu schwierig wäre. Ich kann mir vorstellen, dass dies in einer GNU / Windows-Umgebung notwendig wäre, aber ich werde meine Antwort ändern, da dies keinen Schaden anrichten kann. Danke für den "nächster Donnerstag" -Tipp: Es funktioniert auf Ubuntu, also werde ich es einbauen.crontab
syntaktische Anforderung . Also ja, es würde bei der Eingabeaufforderung funktionieren, ohne zu entkommen.