Cron-Tipps zum Nichtausführen von Cron-Jobs an Feiertagen (Montag eines dreitägigen Wochenendes)

Cron-Tipps zum Nichtausführen von Cron-Jobs an Feiertagen (Montag eines dreitägigen Wochenendes)

Wir verfügen über ein Setup von etwa einhundert Maschinen, wobei jede Maschine Cron-Jobs ausführt, wie das Starten und Stoppen von Diensten und das Archivieren der Protokolldateien dieser Dienste am Ende des Tages in einem zentralen Repository.

Ein Problem, das wir haben, ist das dreitägige Wochenende (an Feiertagen haben wir geschlossen). Wir möchten nicht, dass die Dienste an diesen Tagen gestartet werden und eine Verbindung zu den Maschinen unserer Geschäftspartner herstellen.

Derzeit tun wir dies, indem wir die kritischsten Jobs manuell auskommentieren und den ganzen Tag lang eine Menge Fehler passieren lassen. Nicht ideal.

Wenn bei einem Job im Feld „Tag“ „1-5“ eingestellt ist, soll dies grundsätzlich „Arbeitstage“ bedeuten und nicht „Montag bis Freitag“. Wir haben eine Datenbank, die festhält, welche Tage tatsächlich „Arbeitstage“ sind.

Ist es also möglich, den Tagesabgleichsalgorithmus von Cron außer Kraft zu setzen, oder gibt es eine andere Möglichkeit, einfach eine Cron-Einstellung festzulegen, um zu verhindern, dass Dinge an einem Feiertag am Montag gestartet werden?

Danke!

Antwort1

Cron unterstützt diese Art der Festlegung nicht. Es wird sehr schnell sehr kompliziert. Hier in Kanada sind die Feiertage in den einzelnen Provinzen nicht einmal einheitlich.

Ich würde ein Runner-Skript schreiben, das eine Feiertagsdatenbank überprüft und beendet wird, wenn es ein Feiertag ist. Versuchen Sie es mit etwas wie:

#!/bin/bash

HEUTE=$(Datum +%Y%m%d)
wenn grep -q $TODAY /etc/holidays; dann
   echo Urlaub überspringen für $*
   Ausfahrt 0
fi

$*

Antwort2

Ich kann mir einige Möglichkeiten vorstellen, dies zu tun, aber die praktischste Lösung hängt von der genauen Einrichtung aller Cron-Jobs ab. Zum Beispiel:

Wenn die Datenbank der Arbeitstage über ein Skript abgefragt werden kann, könnten Sie am Sonntag einen Cron-Job ausführen lassen, der ermittelt, ob der nächste Tag (Montag) ein Arbeitstag ist oder nicht, und irgendwo eine Datei einrichtet/löscht. Alle Cron-Jobs könnten nach dem Vorhandensein dieser Datei suchen und entsprechend entscheiden, ob sie ausgeführt oder beendet werden.

ODER

Man könnte alle einzelnen Cron-Einträge durch einen Master-Job ersetzen, der alle anderen nur dann auslöst, wenn die (überprüfbare) Datenbank anzeigt, dass es ein Arbeitstag ist.

verwandte Informationen