Monatlicher Neustart, aber nur jeden ersten Montag

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.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax