ubuntuusers.de

Cron

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/time.png Der Dienst Cron erledigt automatisch wiederkehrende Aufgaben. Dazu startet er Skripte und Programme zu vorgegebenen Zeiten oder bei bestimmten Ereignissen.

Es gibt für diesen Zweck mehrere Programme mit individuellen Besonderheiten. Dieser Artikel beschränkt sich auf die bei Ubuntu standardmäßig installierten Programme. Das Cron-System besteht bei Ubuntu aus dem von Debian modifiziertem "Vixie Cron" in Kombination mit dem Programm Anacron. Dabei kümmert sich Cron um Aufgaben, die zu bestimmten festen Zeiten ausgeführt werden sollen, und Anacron betreut Aufgaben, die periodisch (täglich, alle N Tage z.B. wöchentlich oder monatlich erledigt werden müssen.

Cron selber ist gedacht für ständig durchlaufende Rechner, denn während Stillstandszeiten geplante Aufgaben wird Cron beim Wiederanlauf des Rechners nicht nachholen im Gegensatz zu Anacron, der explizit solche Situationen berücksichtigt.

Eine Alternative – mit tendenziell einfacherer Syntax – können systemd/Timer Units sein.

Hinweis:

Cron bzw. Anacron übernehmen bei Ubuntu immer noch wichtige Aufgaben bei der Pflege des Systems, auch wenn viele (aber nicht alle) seiner früheren Aufgaben wie Bereinigung (scrub) von ext2/3/4-Dateisystemen, Verwaltung des Systemlogs, Pflege der Software-Paketquellen u.a. bereits über Systemd-Timer angestoßen werden. Erweiterungen des Systems mit eigenen Aufgaben sind selbstverständlich möglich, erfordern aber Vorsicht, damit diese wichtigen Systemaufgaben nicht beeinträchtigt werden.

Installation

Der Dienst und seine Verwaltungswerkzeuge für die Kommandozeile ist in jeder Ubuntu-Installation bereits enthalten:

  • cron, „Daemon für die Zeitplanung von Prozessen“ aus main

  • anacron, „cron-ähnliches Programm, das sich nicht nach der Zeit richtet“ aus main

Arbeitsweise

Der Dienst Cron wird bei Ubuntu automatisch durch das Init-System systemd gestartet; zuständig dafür die die Unit cron.service aus dem Ordner /lib/systemd/system/. Cron überprüft dann einmal jede Minute seine Konfigurationsdateien und startet zeitgerecht die definierten Programme.

Beim Rechnerstart startet systemd ebenfalls die Timer-Unit anacron.timer mit einer Laufdauer von 1 Stunde und diese Zeitstufe startet periodisch anacron über die Unit anacron.service, allerdings nur nach 07 Uhr und nur, wenn der Rechner über das Stromnetz versorgt wird. Anacron überprüft anhand seiner eigenen Konfigurationsdateien, ob seit seinem vorherigen Aufruf neue Aufgaben zur Ausführung anstehen und startet solche.

Die Konfigurationsdateien zur Definition der Aufgaben (die "Crontabs") befinden sich an unterschiedlichen Orten im Dateisystem und haben auch unterschiedliche Formate:

  • /etc/crontab: Dies ist die Haupttabelle für auszuführende Cron-Jobs aus Sicht des Systems. Sie wird vom Administrator des Systems gepflegt.

  • /etc/cron.d/: In diesem Ordner können zusätzliche Dateien abgelegt werden, die gleichrangig zur Haupttabelle, aber unabhängig von dieser abgearbeitet werden; d.h.u.a. Definitionen von Umgebungsvariablen aus der Haupttabelle gelten nicht in diesen Nebentabellen. Diese Nebentabellen haben dasselbe Format wie die Haupttabelle. Software-Pakete, welche Cron benutzen, legen in diesem Ordner ihre spezielle Konfiguration ab.

  • /var/spool/cron/crontabs/: In diesem Ordner kann jeder Benutzer auch ohne Root-Rechte[2] eine benutzerspezifische Tabelle ablegen; dies macht man mit dem speziellen Programm crontab. Auch der Benutzer root kann sich eine solche benutzerspezifische crontab definieren, diese ist aber nicht die oben aufgeführte Haupttabelle! Das Format dieser benutzerspezifischen Tabellen ist angelehnt an das Format der Haupttabelle, es fehlt aber ersatzlos die Spalte für den Benutzer, da sich dieser bereits aus dem Dateinamen ergibt.

  • /etc/cron.hourly/: Dieser Ordner enthält ausführbare Programme, welche von Cron für den Benutzer root einmal stündlich gestartet werden. Diese Dateien und auch die im folgenden Punkt werden ignoriert, wenn sie bestimmte Anforderungen nicht erfüllen. → Datei wird ignoriert

  • /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/: Diese Ordner enthalten ausführbare Programme, welche entweder von Cron oder Anacron einmal pro jeweiliger Periode gestartet werden. Bei Ubuntu startet Cron diese Programme per Konfiguration nicht, solange Anacron installiert ist.

  • /etc/anacrontab: Dies ist die (einzige) Tabelle für auszuführende Anacron-Jobs. Sie wird vom Administrator des Systems gepflegt. Bei Ubuntu enthält sie standardmäßig Startbefehle für die Programme in den im vorstehenden Punkt genannten Ordnern.

Tabelle 1: Übersicht Crontabs
Datei Ausführung durch Bearbeitung durch Ausführung als
/etc/crontab
/etc/cron.d/*
cron root Benutzer lt. Aufgabenzeile
/var/spool/cron/crontabs/* cron Benutzer lt. Dateiname Benutzer lt. Dateiname
/etc/cron.hourly/ cron root root
/etc/cron.daily/
/etc/cron.weekly/
/etc/cron.monthly/
anacron (ersatzweise cron) root root
/etc/anacrontab anacron root root

Die Datei /etc/crontab und ihre Schwestern im Ordner /etc/cron.d/ erlauben also die Ausführung eines Jobs im Namen und mit den Rechten eines Benutzers, wobei der Job nicht vom Benutzer verändert werden kann. Dies ist besonders nützlich, wenn Server, die ihren eigenen Benutzer haben, wie z.B. Apache mit www-data, über Cron-Jobs gesteuert werden sollen. Oder wenn man für Benutzer Jobs anlegen möchte, die der Nutzer jedoch selber nicht verändern können soll.

Details zur Arbeitsweise von Anacron siehe späteren Abschnitt: → Details zu Anacron

Cron wie Anacron versenden standardmäßig Ausgaben der Cron-Jobs auf stdout und stderr sowie Fehlermeldungen per E-Mail, was bei Ubuntu standardmäßig nicht funktioniert. → Nachricht von Cron

Formate

Dieses Kapitel beschreibt die Dateiformate der Crontabs.

Jede Crontab ist eine Textdatei. Möglich sind diese Zeilen; jede muss mit einem Zeilenvorschub (Linefeed, ASCII 012) enden:

  • Leerzeilen enthalten gar nichts oder nur Leerzeichen und Tabulatoren. Sie werden ignoriert.

  • Kommentarzeilen beginnen in der ersten Spalte mit einem # und können beliebigen Text enthalten. Werden auch ignoriert.

  • Definitionen für Umgebungsvariablen haben die Form „Name = Wert“. Leerzeichen vor und nach dem Gleichheitszeichen sind möglich, aber optional und werden ignoriert. Die Zeichenfolge für Wert wird wörtlich genommen, es erfolgt insbesondere keine Ersetzung von Variablen. Wenn man führende oder nachfolgende Leerzeichen für wichtig hält, muss man die gesamte Zeichenfolge in sonst optionale einfache oder doppelte Anführungszeichen setzen. Die so definierten Umgebungsvariablen werden allen später in der Datei genannten Programmen als Programmumgebung mitgegeben.

  • Für Aufgabenzeilen (Cron-Jobs) gibt es bei Cron zwei Formate:

    • Das Grundformat besteht aus sieben bzw. sechs Feldern. Die ersten fünf dienen der Zeitangabe (Minute, Stunde, Tag, Monat, Wochentag) für einen Cron-Job, dann folgt (nur in der systemweiten Crontab) der Benutzername, unter dem der Befehl ausgeführt werden soll, und das letzte Feld enthält den Befehl. Die einzelnen Felder werden durch Leerzeichen oder Tabulatoren getrennt.

    • Beim alternativen Format werden nur drei bzw. zwei Felder verwendet indem an Stelle der fünf Felder der Zeitangabe nur ein Feld mit einem Schlüsselwort steht.

  • Aufgabenzeilen für Anacron (Anacron-Jobs) enthalten vier durch Leerzeichen oder Tabulatoren voneinander getrennte Felder.

In Aufgabenzeilen definiert das letzte Feld bei allen Formaten das zu startende Programm oder Skript inkl. der benötigten Parameter und ggf. Umleitungen für Ausgaben.

⚓︎

Hinweis:

Das Zeichen % hat in Crontabs eine besondere Bedeutung: Es wird von Cron in einen Zeilenvorschub umgewandelt. Wenn dies nicht erwünscht ist, muss man es sorgfältig durch Quotierung davor schützen. → Prozentzeichen zerlegt Crontab

Andere als die zuvor beschriebenen Zeilen sind unzulässig; Cron versteht auch keine Fortsetzungszeile durch das Zeichen \ am Ende der vorherigen Zeile und auch keine Kommentare am Zeilenende.

⚓︎

Hinweis:

Jede Zeile in einer Crontab muss aus technischen Gründen (ähnlich wie bei der fstab) mit einen Zeilenvorschub (Linefeed, ASCII 012) enden.

Es ist gute Praxis, eine Crontab mit einem Kommentar abzuschließen. Falls man bei dieser Zeile den Zeilenvorschub vergisst, meldet zwar Cron einen Fehler, was ihn aber nicht von der Arbeit abhält.

Die offizielle Dokumentation der Crontabs findet man in den Manpages:

man 5 crontab
man anacrontab 

Cron-Jobs in Systemtabellen

Dies betrifft die Aufgabenzeilen in der Datei /etc/crontab und in den Dateien im Ordner /etc/cron.d/.

Grundformat

Beim Grundformat enthalten Aufgabenzeilen genau 7 Felder. Die ersten fünf Felder spezifizieren die geplante Ausführungszeit gemäß Tabelle 1, das sechste Feld enthält den Namen eines Benutzers aus der Datei /etc/passwd. Jeder bekannte Benutzer kann hier eingesetzt werden, auch Systembenutzer inkl. root. Ein von Cron gestartetes Programm wird mit Rechten dieses Benutzers in einer durch die Crontab beschriebenen Programmumgebung ausgeführt.

1     2     3     4     5    (6)   L
|     |     |     |     |     |    |
|     |     |     |     |     |    +----- Befehl der ausgeführt werden soll
|     |     |     |     |     +------ (Benutzer/Besitzer des Jobs)
|     |     |     |     |
|     |     |     |     +----- Wochentag (0 - 7) (Sonntag ist 0 und 7; oder Namen, siehe unten)
|     |     |     +------- Monat (1 - 12; oder Namen, siehe unten)
|     |     +--------- Tag (1 - 31)
|     +----------- Stunde (0 - 23)
+------------- Minute (0 - 59)

⚓︎

Tabelle 2: Spezifikation der Ausführungszeit
Spalte Verwendung Mögliche Angaben
1 Minute * einzelne Zahl im Bereich 0-59 oder Teilbereich davon oder das Zeichen „*“ für „jede Minute“
* Liste mit durch Kommata getrennten Zahlen oder Bereichen
* Bereich direkt gefolgt von „/“ und einer weiteren Zahl → Anmerkung 3
2 Stunde * einzelne Zahl im Bereich 0-23 oder Teilbereich davon oder das Zeichen „*“ für „jede Stunde“
* Liste mit durch Kommata getrennten Zahlen oder Bereichen
* Bereich direkt gefolgt von „/“ und einer weiteren Zahl
3 Tag * einzelne Zahl im Bereich 1-31 oder Teilbereich davon oder das Zeichen „*“ für „jeden Tag“
* Liste mit durch Kommata getrennten Zahlen oder Bereichen
* Bereich direkt gefolgt von „/“ und einer weiteren Zahl
4 Monat * einzelne Zahl im Bereich 1-12 oder Teilbereich davon oder das Zeichen „*“ für „jeden Monat“
* Liste mit durch Kommata getrennten Zahlen oder Bereichen
* Bereich direkt gefolgt von „/“ und einer weiteren Zahl
* engl. Name eines Monats oder dessen Abkürzung, auch als Liste
5 Wochentag * einzelne Zahl im Bereich 0-7 oder das Zeichen „*“ für „jeden Wochentag“, Sonntag ist wahlweise 0 oder 7
* Liste mit durch Kommata getrennten Zahlen oder Bereichen
* Bereich direkt gefolgt von „/“ und einer weiteren Zahl
* engl. Name eines Tages oder dessen Abkürzung, auch als Liste und in Bereichsangaben → Anmerkung 6

Anmerkungen:

  1. ⚓︎Bereiche bzw. Teilbereiche sind zwei durch einen Bindestrich getrennte Zahlen (die mit zum definiertzen Bereich gehören) aus dem jeweiligen Gesamtbereich. Wenn die zweite Zahl kleiner als die erste ist, so wird das als leere Menge verstanden und ein Cron-Job mit einer solchen Angabe wird niemals ausgeführt.

  2. Das Zeichen „*“ steht jeweils für den zulässigen Gesamtbereich.

  3. ⚓︎Angaben mit Bruchstrich nennen als Zähler den Bereich, als Nenner die Schrittweite. Beispiele:

    • Minutenangabe 5-59/10 steht für: 5,15,25,35,45,55

    • Stundenangabe */2 steht für „alle 2 Stunden“, also 0,2,4,6, … 20,22

    • Stundenangabe 6-23/4 steht für „alle 4 Stunden ab (einschließlich) 06 Uhr“, also: 6,10,14,18

  4. Einzelwerte kann man mit Listen mischen: 3,18-22,9-13/2 steht für: 3,9,11,13,18,19,20,21,22

  5. ⚓︎Für die Wochentage und die Monate können die drei ersten Buchstaben des englischen Namen benutzt werden, z. B. Sun für Sonntag. Groß-/Kleinschreibung spielt dabei keine Rolle.

    • Zulässige Namen für Wochentage: sun, mon, tue, wed, thu, fri, sat.
      Beachte: Es wird zwar 7 synonym zu 0 als Sonntag verstanden, aber umgekehrt ist sun immer 0 und niemals 7! Wochentage können in Bereichen wie z.B. tue-thu verwendet werden, aber fri-sun wird als 5-0 verstanden und ist somit leer. Statt fehlerhafter Angaben wie fri-mon (beabsichtigte Lesung: Freitag bis Montag) kann man fri-sat,sun-mon oder fri,sat,sun,mon verwenden.

    • Zulässige Monatsnamen: jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dez

  6. ⚓︎Tagesangaben und Wochentage gleichzeitig (d.h. beide sind verschieden von *) sind tückisch:

    • "0 0 13 * fri" steht nicht für „nur am Freitag, dem 13.“, sondern für „am 13. und allen Freitagen“

    • Aber "0 0 */12 * fri" steht für „am Freitag, dem 1. und am Freitag, dem 13. und am Freitag, dem 25.“

    • Aber "0 0 1-31/12 * fri" steht für „am 1. und am 13. und am 25. und allen Freitagen“

Alternatives Format

Zur Vereinfachung können die ersten fünf Felder auch durch eine einzelne Zeichenkette ersetzt werden. Hierfür sind acht Schlüsselwörter definiert:

⚓︎

Tabelle 3: Alternative Spezifikation der Ausführungszeit
Abkürzung Bedeutung ausführliche Schreibweise Hinweise
@reboot einmalig, beim Start Bedeutet exakt: Wann Cron gestartet wurde. Da dies durch systemd beim Systemstart erfolgt, sind möglicherweise noch nicht alle benötigten Komponenten für die Cron-Jobs verfügbar und es ergeben sich unerwartete oder unerwünschte Resultate. Daher sollte man besser dieses Schlüsselwort vermeiden und den Job über eine Service-Unit von systemd starten, denn diese sind bzgl. ihrer Abhängigkeiten von anderen Prozessen präzise planbar.
@hourly einmal pro Stunde 0 * * * * Wenn der Job nicht präzise am Anfang jeder Stunde gestartet werden muss, kann dies auch über ein Programm im Ordner /etc/cron.hourly realisiert werden.
@midnight einmal pro Tag 0 0 * * *
@daily einmal pro Tag 0 0 * * * Wenn der Job nicht präzise um Mitternacht gestartet werden muss, kann dies alternativ auch als Anacron-Job realisiert werden.
@weekly einmal pro Woche 0 0 * * 0 Wenn der Job nicht präzise um Sonntag Mitternacht gestartet werden muss, kann dies alternativ auch als Anacron-Job realisiert werden.
@monthly einmal im Monat 0 0 1 * * Wenn der Job nicht präzise an jedem ersten des Monats um Mitternacht gestartet werden muss, kann dies alternativ auch als Anacron-Job realisiert werden.
@annually
@yearly
einmal im Jahr 0 0 1 1 *

Cron-Jobs in Benutzertabellen

Dies betrifft die Aufgabenzeilen in den mit dem Programm crontab zu bearbeitenden Dateien im Ordner /var/spool/cron/crontabs/.

Beim Grundformat enthalten Aufgabenzeilen genau 6 Felder. Die ersten fünf Felder spezifizieren die geplante Ausführungszeit gemäß Tabelle 2. Der Benutzer für die Cron-Jobs wird nicht in der Crontab selbst notiert, sondern ergibt sich aus den Dateinamen. Ein von Cron gestartetes Programm wird mit Rechten dieses Benutzers in einer durch die Crontab beschriebenen Programmumgebung ausgeführt.

Es kann auch ein alternatives Format mit zwei Feldern verwendet werden. Im ersten Feld stehen Zeitangaben lt. Tabelle 3.

⚓︎ Hier ein Beispiel für die Crontab eines Benutzers mit Erläuterungen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# Umgebungsvariablen
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/bash
MAILTO=''
#M   S     T   M  W       Befehl
#-----------------------------------------------------------------
5   9-20  *   *  *       $HOME/script/script1.sh > /dev/null
*/10 *    *   *  *       /usr/bin/script2.sh > /dev/null 2>&1
59   23   *   * 0,4      cp QUELLDATEI ZIELDATEI
00   22   *   * mon-fri  DISPLAY=:0 LANG=de_DE.UTF-8 zenity --info --text "Ende der Arbeitszeit!"
@midnight                backup
0    1   8-14 *  *       [ "$(date +\%u)" = 6 ] && Befehl
# Das ist das Ende!
  • Zeile 1: Für die Crontab eines Benutzers werden standardmäßig die Umgebungsvariablen HOME, LANG, LOGNAME, PATH, PWD und SHELL gesetzt, allerdings teilweise auf andere Werte als üblich:

    • HOME und PWD bezeichnen das Benutzerverzeichnis.

    • LANG identifiziert die Sprache des Systems, nicht die ggf. vom Benutzer für sich eingestellte Sprache.

    • LOGNAME ist der Dateiname der Crontab, dieser entspricht dem zum Zeitpunkt der Erstellung der Datei gültigen Wert für USER, aber USER selbst ist nun nicht gesetzt!

    • PATH=/usr/bin:/bin

    • SHELL=/bin/sh

  • Zeilen 2,3 setzen die vertrauten Werte für PATH und SHELL.

  • Zeile 4 verhindert sinnlose Versuche, E-Mail ohne funktionierendes E-Mail-System zu versenden. → Nachricht von Cron

  • Zeile 7-12: Cron-Jobs mit Ausführungszeiten:

    1. Fünf Minuten nach jeder vollen Stunde zwischen 09 und 20 Uhr (also 09:05, 10:05, ..., 20:05). Beachte: In Aufgabenzeilen kann man für den Befehl Variablen (hier: HOME) verwenden, sofern diese in derselben Crontab definiert wurden; lediglich in den Definitionen für die Umgebungsvariablen funktioniert das nicht.

    2. Alle 10 Minuten: Beachte: Im Befehl müsste der Pfad für das Skript (hier: /usr/bin/) nicht angegeben werden, da er ja in Zeile 2 in der Variablen PATH steht.

    3. Jeden Sonntag und Donnerstag um 23:59

    4. Jeden Wochentag um 22:00 Uhr ein Programm mit GUI, das die Display- und die Sprach-Variable benötigt. (Das funktioniert so nicht zuverlässig und gar nicht unter Wayland! → GUI.Programm funktioniert nicht)

    5. Jeden Tag Punkt Mitternacht 00:00 Uhr

    6. Jeden 2. Samstag im Monat um 01:00 Uhr. Beachte, dass die Einschränkung auf Samstag durch den auszuführenden Befehl erfolgt und die eingestellte Shell diese Syntax unterstützen muss und das Zeichen % sorgfältig vor einer Interpretation durch Cron geschützt werden muss!

  • Zeile 13: Abschluss der Datei per Konvention mit einem Kommentar verhindert Fehler durch eine eventuell in der vorherigen Zeile vergessene Zeilenschaltung.

Anacron-Jobs

Dies betrifft die Aufgabenzeilen in der Datei /etc/anacrontab.

1     2     3     L    
|     |     |     |
|     |     |     +----- Befehl der ausgeführt werden soll
|     |     |     
|     |     +----- job-identifier (Datei für den Zeitstempel)
|     +----- delay (Zeitverzögerung nach Systemstart in Minuten)
+----- period (Zeit in Tagen)

Tabelle 4: Felder in /etc/anacrontab
Feld Bedeutung Mögliche Werte/Hinweise
period Periode der Jobausführung in Tagen 1 oder größere ganze Zahl oder @monthly. Beispiele:
* 1 – täglich
* 7 – alle 7 Tage, also wöchentlich
* 30 – ungefähr monatlich, exakt alle 30 Tage
* @monthly – monatlich
delay Wartezeit des Jobs in Minuten nach Start von Anacron 0 oder größere ganze Zahl: In der Praxis kann man damit verhindern, dass alle Jobs zugleich laufen und man kann Jobs mit der gleichen Periode in eine Reihenfolge zwingen.
job-identifier Dateiname für den Zeitstempel dieses Jobs Jeder Job muss einen exklusiv von ihm benutzten Dateinamen haben. Hier wird die letzte Laufzeit des Jobs gespeichert; Anacron benötigt diese Information, damit der Job innerhalb der Periode nur einmal ausgeführt wird. Dieser Name wird auch zur Identifizierung der Jobs im Systemlog verwendet.
command Befehl oder auszuführendes Skript

Die Standardeinstellungen in /etc/anacrontab am Beispiel von Ubuntu 22.04:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
HOME=/root
LOGNAME=root

# These replace cron's entries
1	5	cron.daily	run-parts --report /etc/cron.daily
7	10	cron.weekly	run-parts --report /etc/cron.weekly
@monthly	15	cron.monthly	run-parts --report /etc/cron.monthly
  • Zeile 1: Anacron definiert standardmäßig die Umgebungsvariablen ANACRON_ARGS und ANACRON_RUN_ON_BATTERY_POWER (generelle Startparameter), dann INVOCATION_ID und JOURNAL_STREAM (Kennzeichen von systemd für den momentanen Aufruf), sowie setzt LANG, PATH, und PWD, allerdings teilweise auf andere Werte als üblich:

    • LANG identifiziert die Sprache des Systems, nicht die ggf. vom Benutzer für sich eingestellte Sprache.

    • PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin (Dieser Wert ist erkennbar von System abhängig und kann daher auch anders lauten!)

    • PWD=/

  • Zeilen 5-8 setzen SHELL und PATH auf die vertrauten Werte sowie HOME und LOGNAME wie bei Cron.

  • Zeile 11-13: Anacron-Jobs mit Perioden:

    1. Täglich einmal werden die Programme im Ordner /etc/cron.daily/ gestartet,

    2. wöchentlich einmal die im Ordner /etc/cron.weekly/ und

    3. monatlich einmal die im Ordner /etc/cron.monthly/. Dafür wird jeweils das Programm run-parts eingesetzt.

Weitere Umgebungsvariablen können bei Bedarf hinzugefügt werden. Da Anacron sich bezüglich des Versendung von E-Mails analog wie Cron verhält, ist auch hier eine Zeile "MAILTO = ''" sinnvoll, sofern man kein E-Mail-System installiert hat.

Eigene Anacron-Jobs kann man auch mit anderen Perioden in dieser Datei definieren oder mit mit den bekannten Perioden in den Ordnern als Programm hinterlegen.

Crontab bearbeiten

Man bearbeitet eine Crontab mit einem Texteditor seiner Wahl. Wenn man eine graphische Desktop-Umgebung benutzt, darf das auch ein GUI-Programm wie beispielsweise gedit sein. Man muss allerdings beachten, dass es sich in allen Fällen um Systemdateien handelt, welche mit besonderen Prozeduren bzw. mit Root-Rechten[2] bearbeitet werden müssen.

  1. Zur Bearbeitung der Crontabs im Desktop per GUI-Editor benötigt man nur eine Desktop-Datei für sudoedit und crontab; eine geeignete kann man aus einem Anhang dieses Artikels herunterladen und wie jede andere Desktop-Datei installieren: Cron/UU.crontab.desktop

  2. kcron.png Alternativ: Unter KDE gibt es für diese Aufgabe das Paket kde-config-cron. Das Programm ist Teil des KDE Metapakets kdeadmin. Nach der Installation findet man es unter

    • "Systemeinstellungen → Systemverwaltung → Aufgabenplaner"

  3. Alternativ kann man ein Terminal[1] öffnen:

    • Zur Bearbeitung der Datei /etc/crontab, der Dateien im Ordner /etc/cron.d/ oder der Datei /etc/anacrontab wird dieser Befehl empfohlen:

      EDITOR=gedit sudoedit DATEI 

      Hier kann man anstelle gedit seinen bevorzugten Editor einsetzen und man muss DATEI durch den konkreten Dateinamen ersetzen.

    • Zur Bearbeitung der Crontab eines Benutzers meldet man sich als dieser Benutzer an oder wechselt seine Identität zu diesem Benutzer und verwendet diesen Befehl:

      EDITOR=gedit crontab -e 

      Hier kann man anstelle gedit seinen bevorzugten Editor einsetzen, und man gibt keinen Dateinamen an, da dieser automatisch und nicht änderbar durch /var/spool/cron/crontabs/$USER vorgegeben ist.

      Achtung!

      Die Verwendung des Programms crontab ist verpflichtend bei der Bearbeitung dieser Datei, da spezielle Rechte gesetzt werden müssen und es wegen des Zugriffs des laufenden Dienstes Cron auf diese Datei sonst zu Störungen kommen kann.

Dokumentation des Programms crontab:

man 1 crontab 

Details zum Programm crontab

Dieser Abschnitt ist nur relevant für Benutzer, welche keinen Desktop verwenden und somit einen Editor für die Kommandozeile einsetzen müssen.

Alternativ zum oben beschriebenen Aufruf mit Angabe des Editors kann man auch crontab in einem Terminal[1] bzw. virtuellen Console (VCS) ohne eine solche Angabe aufrufen. Das Programm verwendet dann den in der versteckten Datei ~/.selected_editor im Benutzerordner vermerkten Editor. Falls eine solche Datei nicht existiert, wird man zur Auswahl eines Editors aus den im System verfügbaren aufgefordert:

crontab -e 

Zeigt Auswahldialog, wenn noch kein Editor festgelegt wurde:

no crontab for BENUTZERNAME - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/jmacs
  4. /usr/bin/joe
  5. /usr/bin/jpico
  6. /usr/bin/jstar
  7. /usr/bin/rjoe
  8. /usr/bin/vim.tiny

Choose 1-8 [2]: 

Der ausgewählte Editor wird in o.g. Datei gespeichert. Möchte man die getroffene Entscheidung später wieder ändern, löscht man diese Datei oder benutzt wie angegeben den Befehl:

select-editor 

Alternativ – falls man den Editor nur für die aktuelle Bearbeitung ändern möchte – kann dieser auch direkt angegeben werden (hier am Beispiel von VIM):

EDITOR=vim.tiny crontab -e 

Besaß der Benutzer bisher noch keine Crontab, so enthält die Datei nur ein paar Kommentare.

Natürlich kann auch root eine Crontab anlegen. Alle Cron-Jobs, die in dieser Tabelle stehen, werden mit Root-Rechten[2] ausgeführt:

sudo crontab -e 

⚓︎

Details zu Anacron

Cron startet einzelne Jobs immer nur zu den in den Crontabs eingetragenen Zeitpunkten. Ein Cron-Job, der beispielsweise täglich um 18:00 Uhr ausgeführt werden soll, wird an diesem Tag nur ausgeführt, wenn der Rechner um Punkt 18 Uhr in Betrieb ist. Für regelmäßig auszuführende Jobs bei nicht durchgehend laufendem Rechner ist Cron daher nicht ideal. Wenn man Pech hat, wird z.B. eine wichtige Datensicherung ("backup") verpasst. Cron wird daher bei Ubuntu durch das Programm Anacron ergänzt. Der Name Anacron ist eine Verkürzung von "Anac(h)ronistic Cron", also ein „Cron ähnliches Programm, welches sich nicht nach dem aktuellen Zeitpunkt richtet“.

Für einen Anacron-Job wird statt eines Ausführungszeitpunktes eine Zeitdauer in Tagen definiert, innerhalb deren der Job genau einmal gestartet werden soll. Anacron erfordert nicht das kontinuierliche Laufen des Systems, sondern nur gelegentliches Einschalten und prüft bei jedem Start jeden seiner Jobs, wann er zuletzt lief und startet ihn erneut, wenn dies länger als die dem Job zugewiesene Periode zurück liegt.

Neben der bereits beschriebenen Definition von Anacron-Jobs in der Jobliste /etc/anacrontab gibt es noch ein alternatives Verfahren: Anacron kann mit seiner Standard-Konfiguration zum Ausführen von täglich, wöchentlich oder monatlich anstehenden Aufträgen verwendet werden, da seine Jobliste /etc/anacrontab bereits entsprechende Anacron-Jobs enthält. Das auszuführende Skript oder Programm muss nur in das entsprechende Verzeichnis als ausführbare Datei kopiert oder verlinkt werden:

  • /etc/cron.daily/ - täglich auszuführen

  • /etc/cron.weekly/ - wöchentlich auszuführen

  • /etc/cron.monthly/ - monatlich auszuführen

Die Namen der Verzeichnisse sprechen für sich. Am besten schaut man sich kurz die Skripte in diesen Verzeichnissen an, bevor man selber dort etwas ablegt. Alle Programme in einem dieser Ordner bilden zusammen einen Anacron-Job. Die Dateien in den Ordnern werden mittels run-parts gestartet und unterliegen deshalb Einschränkungen.

Anacron wird bei Ubuntu von systemd über die Datei /lib/systemd/system/anacron.timer jede Stunde gestartet, es bestehen aber Einschränkungen:

  • Solange ein Laptop im Batteriebetrieb läuft, wird Anacron auf diesem nicht gestartet.

  • Im Zeitraum 00-07 Uhr wird Anacron nicht gestartet.

Diese Einschränkungen kann man in der Unit-Datei für den Timer kontrollieren und können durch teilweises oder vollständiges Überlagern der Unit-Dateien verändert werden; man benutze dazu folgende Befehle (entsprechend auch auf anacron.service):

systemctl cat anacron.timer
sudo systemctl edit anacron.timer
sudo systemctl --full edit anacron.timer 

Nachricht von Cron

Cron und Anacron schicken die Ergebnisse (also Ausgaben auf stdout und stderr) und auch sonstige Fehlermeldungen während der automatisierten Ausführung eines Jobs an den Benutzer des Jobs per E-Mail.

Hinweis:

Dies setzt allerdings die Funktion eines MTA ("Mail Transfer Agent") wie beispielsweise Postfix voraus. Bei Ubuntu ist diese Voraussetzung standardmäßig nicht erfüllt. Man kann einen MTA selbst installieren und konfigurieren oder sollte in den Crontabs die Umgebungsvariable "MAILTO = ''" setzen, was dann die Versendung von E-Mails unterdrückt.

Die Ausgaben eines Jobs, sofern man keine Versendung per E-Mail wünscht, kann man auch durch Umleitung nach /dev/null entsorgen.

Wenn ein Job keine Ausgabe auf stdout und stderr erzeugt und auch keinen Fehler zurückmeldet, dann wird auch keine E-Mail verschickt. Verschickt werden E-Mails durch einen Aufruf des Programms /usr/sbin/sendmail, sofern ein solches exitiert. Das Programm erhält beim Aufruf die Argumente "-FCronDaemon -i -B8BITMIME -oem BENUTZER" und die zu verschickende E-Mail von stdin. BENUTZER ist der Benutzer des Cron-Jobs oder der Wert der Umgebungsvariablen MAILTO. Auch der Aufruf von sendmail erfolgt mit Namen und mit den Rechten des Besitzers des Cron-Jobs.

Mit der Variable MAILTO kann ein (1!) anderer Empfänger für die Benachrichtigungen unabhängig vom Besitzer der Cron-Tabelle festgelegt werden (MAILTO=irgendwer). Der Besitzer des Jobs erhält dann keine E-Mails von Cron bzw. Anacron.

Anwendungsbeispiele

Erreichbarkeit eines Servers testen

Ein Server (als Beispiel: 192.168.0.1) soll periodisch überprüft werden, ob dieser online ist. Hierzu wird ein Cron-Job des Systems definiert, der alle fünf Minuten ein Ping an den Rechner geschickt. Ein erfolgreicher Ping ist uninteressant, im Falle eines Fehlers sollte jedoch der Cron-Job eine E-Mail mit dem Ergebnis des gescheiterten Pings ausgeben. Dies erreicht man, indem die Standardausgabe an /dev/null umleitet. Fehlermeldungen werden aber – wie gewünscht – per E-Mail verschickt, das positive Ergebnis verworfen.

*/5 * * * * root ping -c 1 192.168.0.1 >/dev/null

Auf Rechner ohne E-Mail-System kann man die Fehlerausgabe stderr in das Systemlog umleiten oder auch dem Benachrichtigungsdienst eines laufenden Desktops übergeben:

*/5 * * * * root ping -c 1 192.168.0.1 1>/dev/null 2>&1 | logger

Internetverbindung aufrecht erhalten

Wenn man gar nicht an den Ausgaben des Cron-Jobs interessiert ist, weil es nur auf die Nebeneffekte ankommt, vernichtet man am besten jegliche Ausgabe des Cron-Jobs. Beispielsweise beim regelmäßigen Ping an eine Internetadresse, um zu verhindern, dass die Dial-Up-Verbindung getrennt wird:

*/5 * * * * root ping -c 1 www.google.de 1>/dev/null 2>/dev/null

Problembehebung

Wenn es nicht wie vorgesehen funktioniert, kann man diese Checkliste zur Fehlersuche verwenden:

  1. Wurde Cron beim Start des Systems überhaupt gestartet und läuft noch?
    Kontrolle über:

    systemctl status cron.service 
  2. Wird Anacron periodisch jede Stunde gestartet?
    Kontrolle über :

    systemctl status anacron.timer 

    und :

    systemctl status anacron.service 
  3. Cron und Anachron melden den Start jeden Jobs im Systemlog. Dieses kann man mit folgenden Befehlen durchsehen, ob überhaupt ein Start des vermissten/fehlerhaften Jobs erfolgt:

    • journalctl -b -u cron.service 
    • journalctl -b -u anacron.service 
    • journalctl -b | grep CRON | less 
  4. Die Geschätzigkeit von Cron kann man einstellen. Dazu muss beim Aufruf des Programms die Option -L mit einer Zahl 0-15 angegeben werden. Dies kann entweder durch (veraltet) Definition der Variablen EXTRA_OPTS in der Datei /etc/default/cron erfolgen oder (besser) durch Bearbeitung der Unit mit dem Befehl:

    sudo systemctl edit cron.service 

    Effektiv ist in der Unit-Datei cron.service die Zeile

    ExecStart=/usr/sbin/cron -f -P $EXTRA_OPTS 

    zu ersetzen durch:

    ExecStart=/usr/sbin/cron -f -P $EXTRA_OPTS -L 15 

    Zur Bedeutung der Zahlen 0-15 konsultiere die Manpage von Cron.

  5. Eigene Skripte kann man anweisen, Fehler auf stdout oder stderr zu schreiben und diese Ströme sollte man auf das Systemlog umleiten. Dies gelingt beim Aufruf des Programms PROGRAMM mit diesem Idiom:

    PROGRAMM 2>&1 | logger -t CRON 

    Wichtig ist hier der Parameter "-t CRON", damit die Ausgaben wiederauffindbar abgelegt werden.

  6. Wenn der Job gar nicht gestartet wird, überprüfe man die jeweilige Crontab auf formale und syntaktische Fehler:

    • Besitzer und Rechte sind richtig gesetzt?

    • Verbotene Zeichen im Dateinamen? → Datei wird ignoriert

    • Crontab endet mit Zeilenvorschub oder Kommentar? → Formate

    • Die Crontab enthält Prozentzeichen (%)?

    • Ein trivialer Job wie

      /usr/bin/echo TEST 2>&1 | /usr/bin/logger -t CRON 

      mit derselben Startzeit-Spezifikation startet zeitgerecht?

      • Wenn nein, dann ist der Fehler in der Startzeit-Spezifikation zu suchen,

      • im anderen Fall sind vielleicht die Umgebungsvariablen SHELL und PATH fehlerhaft.

    • Wenn Programme nicht gefunden werden, kann man sie in der Aufgabenzeile mit ihrem absoluten Pfad angeben.

Unterschiedliches Verhalten eines Befehls/Skripts in Shell und Cron-Job

Dies kann auf nachstehend genannten oder anderen Ursachen beruhen:

  • Das Skript hat einen fehlerhaften oder falschen Shebang.

  • Auf der Kommandozeile und als Cron-Job werden unterschiedliche Shells benutzt. Dies kann in der Crontab über die Umgebungsvariable SHELL angepasst werden.

  • Im Skript werden benötigte Programme nicht gefunden, weil die Umgebungsvariable PATH unterschiedlich gesetzt wurde.

  • In der Programmumgebung des Cron-Jobs fehlen bestimmte Umgebungsvariablen, welche aber für die Kommandozeile gesetzt sind. Dies kann sowohl bei Kommandozeilen-Programmen vorkommen, betrifft aber in besonderem Maße GUI-Programme. → GUI-Programm-funktioniert-nicht

  • Die beteiligten Shells arbeiten in unterschiedliechen Arbeitsmodus:

    • Shells in den grafischen Fenster eines Desktops arbeiten normalerweise als „interaktive nicht-login Shell“, können durch besondere Einstellung aber auch eine „interaktive Login-Shell“ sein.

    • Shells in virtellen Konsolen sind „interaktive Login-Shells“.

    • Cron-Jobs laufen unter einer „nicht-interaktiven nicht-login Shell“.

Wenn man vermutet, dass die beoachteten Unterschiede auf unterschiedlichem Arbeitsmodus beruht, kann man das Skript anpassen oder in der Crontab das Skript über folgenden Befehl versuchsweise als „nicht-interaktive Login-Shell“ starten:

/bin/bash --login /PFAD-ZUM-SKRIPT/SKRIPT

Prozentzeichen zerlegt Crontab

In einer Crontab hat das Prozentzeichen % eine besondere Bedeutung: Es wird von Cron umgewandelt in einen Zeilenvorschub. Dieses überraschende Verhalten wurde vorgesehen, um einem Cron-Job eine von ihm über stdin lesbare Eingabe geben zu können. Details → Crontab and % 🇬🇧

Während auf einer Kommandozeile oder in einem Skript eine Formulierung wie beispielsweise:

echo cron-test1-$(date +"%Y%m%d-%H_%M") >> /tmp/cron-test.txt 

problemlos Funktioniert, kommt es in einer Crontab zu Fehlern. Als Problemlösung bietet sich an, entweder die Befehle über eigene Skripte auszuführen, oder man setzt vor jedes %-Zeichen einen Backslash '\'. Für obiges Beispiel lautet der entsprechende Eintrag in der crontab dann:

*/2 * * * * heinz echo cron-test1-$(date +"\%Y\%m\%d-\%H_\%M") >> /tmp/cron-test.txt

Besitzer und Rechte

Ein Fehler, der auch dazu führen kann, dass die Einträge in einer Crontab nicht ausgeführt werden, sind falsche Besitzer oder Rechte für die Datei.

  • Die Datei /etc/crontab soll root gehören und darf nur von diesem schreibbar sein; sie soll nicht ausführbar sein:

    $ls -al /etc/crontab /etc/cron.d/
    -rw-r--r-- 1 root root 1138 Sep 14 09:36 /etc/crontab
    
    /etc/cron.d/:
    insgesamt 28
    drwxr-xr-x   2 root root  4096 Aug  7  2022 .
    drwxr-xr-x 137 root root 12288 Okt 25 16:38 ..
    -rw-r--r--   1 root root   285 Jul 16  2019 anacron
    -rw-r--r--   1 root root   201 Feb 14  2020 e2scrub_all
    -rw-r--r--   1 root root   102 Feb 13  2020 .placeholder

    Dies gilt entsprechend auch für jede Datei im Ordner /etc/cron.d/ und den Ordner selbst.

  • Die Dateien in den Ordnern /etc/cron.hourly/ usw. müssen dagegen ausführbar sein. → Datei wird ignoriert

  • Die Crontab jedes Benutzers (im Beispiel: userX) im Ordner /var/spool/cron/crontabs/ muss dagegen dem jeweiligen Benutzer gehören und darf von niemandem außer ihm selbst gelesen oder geschrieben werden können und soll auch nicht ausführbar sein:

    $ sudo ls -al /var/spool/cron/crontabs/
    insgesamt 12
    drwx-wx--T 2 root  crontab 4096 Okt 26 06:44 .
    drwxr-xr-x 3 root  root    4096 Aug 20  2021 ..
    -rw------- 1 userX crontab 1199 Okt 26 06:44 userX

Besitzer und Rechte können bei Bedarf mit Root-Rechten[2] mit den Programmen chown und chmod korrigiert werden.

Datei wird ignoriert

Die Dateien in den Ordnern /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/ und /etc/cron.monthly/ werden mittels run-parts gestartet und unterliegen deshalb Einschränkungen:

  • Sie müssen ausführbar sein.

  • Der Dateiname darf nur große und kleine Buchstaben, Ziffern, Unterstriche und Bindestriche enthalten; andernfalls wird die Datei ignoriert. Der reguläre Ausdruck "^[a-zA-Z0-9_-]+$" definiert exakt alle zulässigen Zeichenfolgen. Punkt und Umlaute sind also beispielsweise nicht erlaubt.

GUI-Programm funktioniert nicht

Cron und Anacron haben von Haus aus keinen Zugriff auf den Desktop bzw. den einem Desktop zugeordneten Bildschirm. Sie sind in erster Linie für Server gedacht, die oftmals an gar keinen Bildschirm angeschlossen sind. Die Ausgabe der Kommandos wird auch nicht auf den Bildschirm geschrieben – das könnte auch sehr störend sein – sondern in Logdateien, bzw. in E-Mails, sofern eingerichtet, die an den Benutzer oder Administrator geschickt werden.

Das Cron-System hat also keine Kenntnis von grafischen Anzeigeprogrammen wie Xorg bzw. Wayland oder Desktopumgebungen bzw. deren Funktionalitäten. Will man aus einen Cron-Job ein Fenster auf einem Desktop öffnen oder eine andere Funktion (wie z.B. den GNOME Schlüsselbund oder den Benachrichtigungsdienst) eines Desktops benutzen, muss man selbst beim Programmaufruf oder im Skript dafür sorgen, dass diese Komponennten im System gefunden werden. In vielen Fällen kann dies durch Setzen geeigneter Umgebungsvariablen geschehen. Leider gibt es dafür kein allgemein gültiges Rezept, sondern für jeden Desktop und jedes Programm können individuell auch noch von der momentanen Situation abhängige Variablen und Werte erforderlich sein:

  • Da die Kommunikation mit dem Desktop über D-Bus erfolgt, benötigt man in vielen Fällen die Umgebungsvariable DBUS_SESSION_BUS_ADDRESS des anzusprechenden Desktops.

  • Wenn der Desktop einen X-Server benutzt, kann auch die Angabe des Displays über die Umgebungsvariable DISPLAY erforderlich sein. Die konkrete Angabe DISPLAY=:0 hilft in vielen Fällen, ist aber nicht allgemein gültig.

  • Wenn der Desktop unter Wayland läuft, kann die Angabe der Umgebungsvariablen XDG_RUNTIME_DIR helfen.

  • Manchmal muss auch noch die Lokalisation eingestellt werden, damit man z.B. deutsche Oberflächen erhält und Umlaute funktionieren. Zenity verweigert ohne diese Einstellung ggf. sogar komplett den Dienst (siehe auch diese Foren-Posts: 1, 2, 3): LANG=de_DE.utf8

  • Unter bestimmten Desktopumgebungen wie beispielsweise LXDE (Lubuntu) oder Xfce (Xubuntu) ist es nötig, die Umgebungsvariable XAUTHORITY auf den richtigen Wert zu setzen.

In allen Fällen besteht das Problem, die richtigen Werte für die genannten und weitere Variablen zu ermitteln.

Ein mögliches Szenario besteht darin, die Variablen mit ihren aktuellen Werten in einer in einer von Cron auffindbaren Datei (z.B. in einer versteckten Datei im Benutzerordner) zu hinterlegen. Der Cron-Job kann dann auf die entsprechenden Werte zurückgreifen.

Man kann diese Werte mit einem Skript abfragen, welches in der Desktop-Umgebung vor dem eigentlichen Aufruf des Cron-Jobs läuft und die aktuellen Werte der Variablen in einer von Cron auffindbaren Datei als toten Briefkasten ablegt.

Konkret kann man dieses Skript über die Autostart-Funktion seines Desktops ausführen lassen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/bin/bash
# Exportiere die dbus session address und andere Variablen, damit sie via Cron nutzbar sind.
# Diese Datei muss via Autostart ausgeführt werden

umask 0600
rm -f $HOME/.kassiber ; touch $_ ; exec >$_
while read VAR
do    echo "$VAR=${!VAR}"
      echo "export $VAR"
done  <<-EOF
DBUS_SESSION_BUS_ADDRESS
DISPLAY
LANG
XAUTHORITY
EOF

Die Liste der Variablen im Here-Dokument ist natürlich an die eigenen Bedürfnisse anzupassen.

Bei Start des Cron-Jobs ist dann dieser tote Briefkasten einzusehen. In der Crontab des Benutzers formuliert man dazu den Job z.B. so:

SHELL = /bin/bash
00   22   *   * mon-fri  . $HOME/.kassiber ; zenity --info --text "Ende der Arbeitszeit!"

Der alleine stehende Punkt ist der POSIX-Shell-Befehl source.

Zugriff auf GNOME Schlüsselbund ermöglichen

Jobs mit Zugriff auf E-Mail-Konten (beispielsweise Download neuer Nachrichten) benötigen je nach Einrichtung einen Zugriff auf den GNOME Schlüsselbund. Dazu muss DBUS_SESSION_BUS_ADDRESS als Umgebungsvariable gesetzt sein. Man kann das wie im vorstehenden Abschnitt lösen.

Cron-Job startet zu falscher Stunde

Die Zeitangaben in den Crontabs werden als relativ zu der in der Datei /etc/timezone genannten Zeitzone verstanden. Der Administrator des Systems muss hier die für das System gültige Zeitzone hinterlegen, das kann eine andere als die benutzerspezifische sein!

Anacron benötigt ebenfalls eine Angabe zur Zeitzone des Systems, da der Zeitpunkt des Datumswechsels von der Zeitzone abhängt. Anacron bezieht diese Information aber aus andereren Quellen als Cron. Die in der Manpage genannten Methoden scheinen bei Ubuntu nicht realisiert zu sein, daher wird sich Anacron bei der Bestimmung des Tageswechsels vermutlich nach der Weltzeit (UTC, Z-Zeit) richten. Die Zeitzonen MEZ bzw. MESZ laufen dieser 1 bzw. 2 Stunden voraus.

Wenn für System und Benutzer unterschiedliche Zeitzonen definiert sind, muss der Benutzer in seiner Crontab die Zeiten als relativ zur Zeitzone des Systems eintragen.

Für die richtige Umschaltung Normalzeit ←→ Sommerzeit ist das Paket tzdata zuständig, welches stets aktuell gehalten werden muss.

Diese Revision wurde am 2. Dezember 2023 10:57 von kB erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: System