linux:cronjobs

Cronjob

Cronjobs sind wiederkehrende Aufgaben, die das System zu einer angegebenen Zeit ausführt. Dafür ist der Cron-Dienst (Daemon) zuständig. Im Fenster-OS wird so etwas geplante Tasks genannt.

systemd timers

Auf allen aktuellen Systemen gibt es zusätzlich systemd-timer: systemctl list-timers

Die anzeigten timer sind Dateien deren symbolische Links im Verzeichnis /etc/systemd/system/timers.target.wants/ liegen.

  1. Die auszuführenden Befehle werden in einer benutzereigenen Tabelle, der sogenannten crontab, gespeichert (bearbeiten mit crontab -e).
  2. Systemweit befinden sich unter anderem bereits vorgegebene Verzeichnisse: in /etc mit Namen wie
    • /etc/cron.daily
    • /etc/cron.hourly
    • /etc/cron.mouthly
    • /etc/cron.weekly
      die einen Eintrag in die benutzereigene Crontab überflüssig machen können und eher von System-programmen benutzt werden, da diese aus Übersichtlichkeitsgründen nicht alle eigene User und eigene Crontabs anlegen.
  3. Systemweit gilt auch die Datei /etc/crontab. Hier ist zu beachten, dass bei vielen Distributionen keine Pfade angegeben werden. Es müsste eine Zeile
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 

    über den ersten Aufrufen stehen.

  4. Die crontabs der Benutzer liegen in Einzeldateien (Dateiname = Benutzername) unter /var/spool/cron/crontabs .

Entweder Verweise (Symlinks) in den oben genannten Verzeichnisse anlegen oder mit dem Befehl crontab -e -u [user] (wobei die Userangabe nicht verpflichtend ist).

Dann kann man Einträge in der folgenden Form anlegen:

# m h dom mon dow command
5 1 * * * Befehl

die einzelnen Zahlen stehen dabei für folgende Angaben (von vorne nach hinten):

  1. Minute (0 - 59)
  2. Stunde (0 - 23)
  3. Tag (1 - 31)
  4. Monat (1 - 12)
  5. Wochentag (0 - 7) (Sonntag =0 oder =7)
  6. Befehl: der (absolute) Pfad zum auszuführenden Shellscript.

Im Beispiel wird also MeinBefehl um 1:05 an jedem Tag, Monat und Wochentag ausgeführt.

Die Ausführung des Cronjobs wird protokolliert und aufgetretene Fehler werden dem ServerAdmin per mail zugestellt.

Format: # m h dom mon dow user command

#Jedes Jahr am Samstag, den 02.09. um 13:50 Uhr:
50 13 2 9 6 root /Pfad-zum/Script.sh

#Jeden zweiten im Monat um 13:50 Uhr:
50 13 2 * * root /Pfad-zum/Script.sh

#Jeden Samstag um 13:50 Uhr:
50 13 * * 6 root /Pfad-zum/Script.sh

#Jeden Freitag, Samstag und Sonntag um 13:50 Uhr
#und um 14:50 Uhr:
50 13,14 * * 5,6,7 root /Pfad-zum/Script.sh

#Jeden Samstag im Zehnminutentakt:
*/10 * * * 6 root /Pfad-zum/Script.sh

# alle 3 Stunden:
* */3 * * * root /Pfad-zum/Script.sh

Wenn man selbst keinen Server besitzt bzw. administriert und auch keinen Rechner 24h am Tag angeschaltet hat, kann man auch einen der zahlreichen Dienste benutzen.

Hier nur eine kleine Auswahl:

cronjob.de my-cronjob.de cron-job.org

In manchen Umgebungen (Sicherheit!) soll Cron nur für bestimmte Benutzer ausführbar sein. Dies lässt sich durch die Datei /etc/cron.allow realisieren. Dort trägt man die Benutzer (root, …) ein denen cron erlaubt sein soll. Oft wird dies jedoch auch über die Mitgliedschaft in einer Gruppe geregelt.

Der umgekehrte Weg (manche Benutzer von Cron ausschließen) funktioniert mit /etc/cron.deny.