Immer größere Datenmassen sicher zu speichern ist eine Herausforderung für jede IT-Infrastruktur. Schon mit Gigabit-Ethernet lassen sich aber ... (mehr)

Einsatz von Zeiträumen

Was dieser Artikel bis jetzt von Fcron gezeigt hat, dürfte freilich kaum jemanden zum Umstieg bewegen, denn es entspricht dem klassischen Cron-Verhalten. Doch jetzt wird es spannend: Kaum ein Rechner – außer Server – dürfte ununterbrochen laufen. Das führt beim klassischen Cron zu ausgelassenen Jobs. Fcron kann das besser.

Denn die Cron-Alternative kann auch mit definierten Zeiträumen umgehen. Läuft das System innerhalb des angegebenen Zeitraums, wird der Job ausgeführt. Dieses Fcron-Feature macht sich vor allem auf Laptops gut, wie das folgende Listing zeigt:

%daily,nice(7) * 10-14 makewhatis -u%daily,nice(7) 30 16-18updatedb

Diese Zeilen stammen aus der System-Fcrontab des Autors. Das »%« am Zeilenanfang signalisiert Fcron, dass nun ein Zeitraum folgt. Das folgende Schlüsselwort beschreibt die Art des Zeitraums. Hier können die Angaben »hourly« , »daily« , »weekly« und »monthly« stehen, auch Zeiteinheiten sind zulässig, beispielsweise »mins« , »hours« , »days« , »dow« (Day of the Week, Wochentag) oder »mons« . Schlüsselwörter mit der Endung »-ly« sind leicht zu merken: »daily« etwa führt einen Job täglich einmal aus, »weekly« startet ihn einmal irgendwann zwischen Montag und Sonntag und wartet anschließend, bis die nächste Woche beginnt.

Nach dem Komma ist eine weitere Option zu sehen: »nice()« . Wie der Name andeutet, sorgt sie dafür, dass der Job mit dem in Klammern angegebenen Nice-Wert läuft. Danach folgen die Angaben für den Zeitraum sowie das Kommando.

Was machen die obigen Fcron-Jobs? Der erste aktualisiert die Manpages mit dem Kommando »makewhatis -u« , und zwar täglich irgendwann zwischen 10 und 14 Uhr. Die zweite Zeile aktualisiert die (S)locate-Datenbank mit »updatedb« , falls der Rechner irgendwann zwischen 16:30 oder 18:30 läuft.

Das Beispiel verwendet das Schlüsselwort »daily« , das einen in Minuten und Stunden definierten Zeitraum erwartet. Das Gleiche gilt für »weekly« , »hourly« benötigt nur das Feld für die Minuten, und »monthly« erwartet Minuten, Stunden und Tage als Angabe. Tritt nun auch noch die Vorsilbe »mid« vor eines dieser Schlüsselwörter, etwa in »middaily« oder »midweekly« , dann beginnt und endet der Zeitraum in der Mitte der angegebenen Zeiteinheit. Für »midweekly« zum Beispiel bedeutet dies, dass das Kommando irgendwann zwischen Donnerstag dieser Woche und Mittwoch nächster Woche zur Ausführung kommt.

Weitere Feinheiten der Konfiguration veranschaulicht der folgenden Job:

%hours 20,40 9-10 * * * finger boss

Er läuft jeden Tag nur einmal, und zwar entweder um 9:20, 9:40, 10:20 oder 10:40 Uhr. Steht am Zeilenanfang nämlich »hours« oder ein anderes Keyword mit »s« am Ende, ignoriert Fcron normalerweise alle Felder, die kleiner als das Keyword sind. Ist jedoch ein solches Feld gesetzt (ein »*« zählt nicht), berücksichtigt Fcron diese Angabe und verwendet sie als möglichen Ausführungszeitpunkt.

Stünde im obigen Beispiel dagegen am Beginn »mins« , würde das Finger-Kommando jeden Tag viermal ausgeführt, nämlich um 9:20, 9:40, 10:20 und 10:40 Uhr. Der Grund: In diesem Fall wären die Minuten Teil des Zeitraums. Im Allgemeinen liefern die auf »s« endenden Schlüsselwörter Einstellungsmöglichkeiten, die zwischen einem festen Termin und den Keywords mit »-ly« rangieren.

Wenn die Uptime zählt

Schön wäre es, die Ausführung von Kommandos von der Uptime abhängig zu machen. Dazu könnte man bestimmt ein kompliziertes Skript mit Loop- und Sleep-Funktion schreiben, es geht aber auch viel einfacher: Fcron kann Jobs in Abhängigkeit von der Uptime ausführen – genauer: abhängig von der Uptime seit dem Start des Fcron-Daemon.

Um einen Bericht zu erzeugen, der alle 15 Minuten mit den Kommando »w« die Systemlast und die eingeloggten User auflistet, lässt sich beispielsweise folgende Zeile verwenden:

@ 15 w > /root/user_stats

Das »@« am Zeilenanfang markiert den Job als abhängig von der Uptime. Danach folgt die Zeitangabe für den Rhythmus der Ausführung, in diesem Fall alle 15 Minuten, gefolgt von der Befehlszeile. Angenommen der Admin möchte erfahren, wenn ein Rechner die stolze Uptime von einem Jahr überschreitet. Das kann er mit folgender Zeile erledigen:

@mail 365d echo "Hurra, die Kiste ist ein Jahr älter :D"

Die Angabe »mail« schickt eine Nachricht an den Eigentümer der Fcrontab – im Unterschied zur Option »mailto()« , die eine E-Mail-Adresse als Argument entgegennimmt. Das Feld für den Ausführungsrhythmus ist mit »365d« befüllt, also 365 Tage. An dieser Stelle lassen sich verschiedene Zeiteinheiten einsetzen, nämlich »s« für Sekunden, »h« für Stunden, »d« für Tage, »w« für Wochen und »m« für Monate. Achtung: Für Minuten wird keine Einheit angegeben.

Die Einheiten lassen sich sogar kombinieren, wie in folgendem Beispiel:

@ 2w3d10h15 sh /root/script.sh

Dieser Eintrag sorgt dafür, dass ein Skript immer nach zwei Wochen, drei Tagen, zehn Stunden und 15 Minuten ausgeführt wird.

Ähnliche Artikel

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023