Nichts als Wiederholungen


© April 2022, letzte Änderung am 18.09.22

Übersicht

regelmäßige Aufgaben erledigen

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.

Aufbau einer Zeile in crontab

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.

crontab Aufrufe

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.

Backup Beispiel

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

Anacron - für Dinge, welche nachgeholt werden sollen

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.

Aufbau einer Zeile in anacrontab

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.

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