Für alle regelmäßg anfallenden Aufgaben, welche automatisiert ablaufen sollen,
bietet sich an, einen sogenannten cron job
zu erstellen.
Zum starten dieses cron jobs
wird ein cron
-Daemon benötigt,
welcher im Linux bereits etabliert ist.
Der cron
-Daemon überprüft minütlich ob in einer Tabelle Namens crontab
Einträge zu finden sind, ob ein cron job
zu starten ist.
Alle Konditionen von der Minute bis zur Woche werden UND-Verknüpft.
Wenn alle Konditionen erfüllt sind, wird entweder der Befehl
oder das Shell-Script gestartet.
Debian empfiehlt, nicht die crontab Dateien selbst zu bearbeiten,
sondern crontab -e
aufzurufen.
Mit diesen Aufruf wird überprüft, ob die Angaben in sich schlüssig sind.
Mit crontab -l
liste ich die bereits bestehenden cron jobs von mir.
Interessieren mich die cron jobs eines anderen Benutzers, hier b1
,
kann ich folgendes eingeben crontab -l -u b1
.
Immer Montags um 22:00 möchte ich ein Backup starten.
Wenn das Backup fertig ist, wird eine kleine Ausgabe gemacht.
Das Backup-Script habe ich direkt mit nano
erstellt.
Entsprechend sind die Rechte -rw-r--r--
bzw. 644
.
Da ich mir chmod +x ~/backup
gespart habe, muss ich das Script via Shell aufrufen.
Zum Test starte ich mein Script zunächst jede Minute.
sh backup backed 2022-09-16 17:30:43 crontab -e * * * * * sh ~/backup
Die Ausgabe backed 2022-09-16 17:39:43
oder ähnlich geht zurzeit ins Leere.
Um dennoch überprüfen zu können, ob das Script aufgerufen wird,
kann ich in syslog
gucken.
su cat /var/log/syslog … Sep 16 17:35:29 b41 crontab[22933]: (a1) BEGIN EDIT (a1) Sep 16 17:37:15 b41 crontab[22933]: (a1) REPLACE (a1) Sep 16 17:37:15 b41 crontab[22933]: (a1) END EDIT (a1) Sep 16 17:38:01 b41 CRON[22949]: (a1) CMD (sh ~/backup)
Um die letzte normale Ausgabe oder Fehlermeldung sehen zu können,
kann ich sie in eine Datei umleiten.
Anbei die finale Einstellung für jeden Montag 22:00.
crontab -e 0 22 * * 1 sh ~/backup > backup.log 2>&1
Nachdem ein Montag verstrichen ist, finde ich folgende Ausgabe in syslog
.
su cat /var/log/syslog … Sep 19 22:00:01 b41 CRON[23546]: (a1) CMD (sh ~/backup > backup.log 2>&1)
Sollte es unter DEB 10 Probleme geben,
z.B. das einem nicht erlaubt ist einen cron jobs anzulegen,
dann kann das an der Existenz von /etc/cron.allow
oder /etc/cron.deny
liegen.
Im Ordner /var/spool/cron/crontabs
befindet sich je Benutzer, der das nutzt,
eine geschützte und überprüfte Kopien der jeweiligen crontab
.
Wurde etwas nicht übernommen, ist von Tippfehlern auszugehen.
Zum Anfang
Cron mag Sinn machen wenn der jeweilige Server rund um die Uhr eingeschaltet ist.
Spätestens wenn, der Computer von Zeit zu Zeit ausgeschaltet wird,
besteht bei cron
die Möglichkeit Termine zu verpassen.
Für Aufgaben, welche nicht zu einen betimmten Zeitpunkt,
sondern innerhalb eines Zeitraumes von 1 bis n Tagen erledigt werden sollen,
bietet sich anacron
an.
Bedenke, anacron wird nicht im Batteriebetrieb gestartet
und falls ein anacron job läuft, läuft er meist mit niedriger Priorität.
Im Gegensatz zum crontab
ist beim anacrontab
der Aufbau gänzlich anders.
Da anacron
bereits längere Zeit nicht mehr gepflegt wurde und eigentlich veraltet ist,
geschieht die Eingabe direkt in /etc/anacrontab
.
Die ersten Zeilen bis @monthly
sollten nicht angerührt werden.
Reichen die drei Kategorien bereits, kann ein mögliches Script direkt in folgende Ordner eingetragen werden.
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly
Der /etc/cron.daily
-Ordner sieht bei mir unter DEB 10 (Buster) wie folgt aus.
ls -la /etc/cron.daily/ total 68 drwxr-xr-x 2 root root 4096 Aug 27 19:49 . drwxr-xr-x 140 root root 12288 Sep 13 20:35 .. -rwxr-xr-x 1 root root 311 May 19 2019 0anacron -rwxr-xr-x 1 root root 1478 May 28 2019 apt-compat -rwxr-xr-x 1 root root 355 Dec 29 2017 bsdmainutils -rwxr-xr-x 1 root root 384 Dec 31 2018 cracklib-runtime -rwxr-xr-x 1 root root 1187 Apr 19 2019 dpkg -rwxr-xr-x 1 root root 4128 May 13 2020 exim4-base -rwxr-xr-x 1 root root 377 Aug 29 2018 logrotate -rwxr-xr-x 1 root root 1123 Feb 10 2019 man-db -rwxr-xr-x 1 root root 539 Jan 15 2019 mdadm -rwxr-xr-x 1 root root 1403 Mar 21 2019 ntp -rwxr-xr-x 1 root root 249 Sep 27 2017 passwd -rw-r--r-- 1 root root 102 Oct 11 2019 .placeholder
Die Reihenfolge der Abarbeitung ist alphabetisch, daher sollte kein Script z.B.  00
heißen.
Dateinamen mit Namenserweiterung sind ungültig. wie z.B. test.sh
.
Und alles kann nur mit root-Rechten verändert werden.
Wann ein anacron Job zuletzt aufgerufen wurde, steht in /var/spool/anacron
.
Anbei das Beispiel für täglich.
su cat /var/spool/anacron/cron.daily 20220918
Also am 18. September 2022. Mehr Details finden sich im /var/log/syslog
.
Laut debian.org wird sowohl cron
alsauch anacron
langfristig durch cronie
ersetzt.
Zum Anfang