Hallo Zusammen,
ich habe letztens für einen Kunden einen monatlichen Neustart, für jeden ersten Montag, auf einigen Systeme einbauen sollen. Sounds simple 🙂 Der Cronjob baut sich wie folgt auf (wir wir alle wissen):
M H DoM M DoW BEFEHL Beispiel: */10 * * * echo "Ich laufe alle 10 Minuten" >> /var/log/run.txt [... Auszug man 5 cronjob ...] The time and date fields are: field allowed values ----- -------------- minute 0-59 hour 0-23 day of month 1-31 month 1-12 (or names, see below) day of week 0-7 (0 or 7 is Sun, or use names)
"According to this" würde der Cronjob ja wie folgt aussehen...
0 5 1-7 * 1 shutdown -r now
Hier greift nun aber ein Sonderfall für den Crontab. Denn die Angabe an "Day of Month" und "Day of Week" werden ODER verknüpft. Es würde durch den Crontab also wie folgt aufgelöst. „Führe aus an: Minuten UND Stunden UND (Tage ODER Wochentage) UND Monate.“
Behelfen kann man sich hier nur über ein Script, welches eine Bedingung prüft, oder über einen Einzeiler der ebenfalls prüft ob Montag ist. Ich habe mich für die letztere Variante entschieden:
0 5 1-7 * * [ "$(LC_ALL=C date '+\%a')" = "Mon" ] && echo "Restart System by Cronjob" >> /var/log/messages &&/sbin/shutdown -r now
Hinter der normalen Cronjobangabe für "Führe aus um 5 Uhr Morgens vom 1 bis zum 7 jeden Monat" folgt die Prüfung ob der aktuelle Tag ein Montag ist. Das LC_ALL=C sorgt für Gleichheit der Sprache auf allen Systemen. Die Info in die Logfile /var/log/messages
habe ich zur Info für andere Administratoren hinterlegt. Anschließend folgt der Reboot an sich.
Schreibe einen Kommentar