# /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details. # Job-description lines are of one of these two forms: # period(days) delay(minutes) job-identifier command # @period_name delay job-identify command SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # These replace cron's entries 1 5 cron.daily nice run-parts --report /etc/cron.daily 7 10 cron.weekly nice run-parts --report /etc/cron.weekly @monthly 15 cron.monthly nice run-parts --report /etc/cron.monthly 1 20 sudoku.zeit perl /home/gerd/.sudoku-zeit/extract-zeit-sudoku-06.pl 1 30 backup_paketlisten /etc/cron.daily/backup_paektlisten.sh 1 40 backup_etc /etc/cron.daily/backup_etc.sh ***** ***** https://forum-raspberrypi.de/forum/thread/47565-cron-anacron/#__RefHeading___Toc3299_103588569 ***** 2. ANACRON anacron anac(h)ronistic cron wird benutzt um Kommandos periodisch, ähnlich wie bei cron auszuführen. anacron ist (im Gegensatz zu cron) für Systeme ausgelegt, die nicht dauerhaft laufen (z.B. Desktops oder Server, die nachts und/oder am Wochenende abgeschaltet werden). Als Ergänzung zu cron bietet sich daher anacron an. Anstatt einer crontab muss nur das auszuführende Skript oder Programm in das entsprechende Verzeichnis des Anacron-Dienstes kopiert oder verlinkt werden. anacron ist unter der GNU GPL (General Public License) lizenziert und in der aktuellen Version in C implementiert. Funktion Sie können mit anacron tägliche, wöchentliche und monatliche Kommandos ausführen lassen. anacron arbeitet im Gegensatz zu cron nicht mit definierten Zeitpunkten (Stunden, Minuten, Wochentagen, etc), sondern mit Zeitstempeln. Bei der Ausführung liest anacron eine Liste von Jobs aus einer Konfigurationsdatei – normalerweise ist dies /etc/anacrontab .Diese Datei enthält die Liste der Jobs, welche von anacron gesteuert werden. Jeder Jobeintrag gibt hierbei einen Zeitraum an (in Tagen), eine Verzögerung (in Minuten), eine eindeutige Job-ID, und einen (Shell-) Befehl. Eine Aufgabe wird zu allererst ausgeführt, und anschließend der Zeitstempel der letzten Durchführung im Format YYYYMMDD gespeichert. Wenn der Zeitstempel einer täglichen Aufgabe auf den Vortag datiert ist, führt anacron diese Aufgabe am aktuellen Tag aus, und erneuert den Zeitstempel dementsprechend. Wenn keine Jobs mehr ausgeführt werden müssen, wird anacron beendet. Die Konfiguation erfolgt, wie bereits erwähnt, in der Datei anacrontab , wohingegen die Zeitstempel im Verzeichnis /var/spool/anacron/ abgelegt werden. Die Skripte, die anacron ausführt, werden in den Verzeichnissen /etc/cron.daily|weekly|monthly abgelegt. Es werden nur diejenigen Jobs von anacron berücksichtigt, deren Kennung und Befehle aus den beiden Dateien anacrontab und cron.* übereinstimmen. Hinweise Stündliche Aufgaben werden also per cron ausgeführt, was auch einen installierten cron-Daemon auf dem System bedingt. Ebenso ist darauf zu achten, dass die Zeitzone korrekt gesetzt ist, da diese sonst (negative) Auswirkungen auf die Zeitstempel hat. anacron überprüft also bei jeder Aufgabe, ob diese entsprechend der Konfiguration bereits ausgeführt wurde. Ist dies nicht der Fall, führt anacron die Aufgabe möglichst zeitnah zum ursprünglichen Zeitpunkt aus. Installation anacron wird mittels der folgenden Befehle installiert : sudo apt update sudo apt-get install anacron Verzeichnisse und Dateien anacron verwendet verschiedene Dateien und Verzeichnisse. Sie werden nachfolgend aufgeführt und die Funktionsweise von anacron erläutert. Am besten schaut man sich kurz die Skripte in diesen Verzeichnissen an, bevor man selbst dort etwas ablegt. Hinweis : Der Skriptname darf nur große und kleine Buchstaben, Ziffern, Unterstriche und Bindestriche enthalten. Andernfalls wird das Skript nicht ausgeführt. Das exakte Zeichenalphabet wird durch folgenden regulären Ausdruck definiert : ^[a-zA-Z0-9_-]+$. Punkt und Umlaute sind also beispielsweise nicht erlaubt. /etc/anacrontab Möchte man Jobs stündlich, täglich, wöchentlich oder monatlich ausführen, muss dafür keine Konfiguration für Anacron vorgenommen werden. Es ist aber möglich, die Perioden zu verändern. Dazu ändert man die Konfigurationsdatei /etc/anacrontab. Die Datei erwartet folgendes Format : * * * Befehl der ausgeführt werden soll | | | | | +------------ job-identifier (Datei für den Zeitstempel) | +------------------ delay (Zeitverzögerung nach Systemstart in Minuten) +---------------- ------- period (Zeit in Tagen) Beispiel für period-Angabe: 1 täglich 7 wöchentlich 30 monatlich Es ist jede andere Zahl möglich. Für monatliche Jobs kann als Periode auch @monthly verwendet werden. Feld Bedeutung: period: Periode der Jobausführung in Tagen delay: Startverzögerung des Jobs nach Systemstart (in Minuten) job-identifier: Zeitstempel-Datei, in welche der Zeitstempel geschrieben wird, damit der Job innerhalb der Periode nur einmal ausgeführt wird, beispielsweise bei täglichen Aufgaben und/oder mehrmaligem Start des Systems an einem Tag. Command: Befehl oder auszuführendes Skript. In der Datei anacrontab im Verzeichnis /etc befinden sich nicht nur die Konfigurationen der Parameter SHELL, PATH und HOME für anacron, sondern auch die Einträge, welche die Scripte in cron.* ausführen. Parameter können gegebenenfalls angepasst oder hinzugefügt werden, wie beispielsweise MAILTO. Wie auch in der /etc/crontab ist es in der /etc/anacrontab möglich, vom System automatisch E-Mails versenden zu lassen : MAILTO="user@localhost" Für den E-Mail-Versand muss ein MTA (Mail Transfer Agent) wie beispielsweise Postfix installiert sein. Nachfolgend die Standardeinstellungen in der /etc/anacrontab dirk@raspberrypi: ~# cat /etc/anacrontab # /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 # 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 Die stündlichen Jobs werden von anacron nicht behandelt und weiterhin von cron ausgeführt : $ grep hourly /etc/crontab 17 * * * * root cd / && run-parts --report /etc/cron.hourly Achtung : Die Skripte in den cron.* Verzeichnissen dürfen keine Endung aufweisen, da sie sonst nicht ausgeführt werden ! Ungültig wäre z.B. rsnapshot.conf : #!/bin/sh rsnapshot hourly | | echo "Backup failure" $ sudo chmod +x /etc/cron.hourly/rsnapshot Analog dazu erstellt man die Skripte in cron.daily, cron.weekly und cron.monthly und ersetzt zugehörig hourly mit daily, weekly und monthly. Die Konfigurationseinträge cron.daily, cron.weekly und cron.monthly sollten unverändert bleiben. anacron liest diese Einträge und führt beispielsweise durch die nachfolgende Zeile einmal täglich alle in /etc/cron.daily abgelegten Skripte aus : 1 5 cron.daily run-parts --report /etc/cron.daily Nach dem Systemstart wird 5 Minuten gewartet, bis diese Skripte ausgeführt werden. Nach der erfolgreichen Ausführung aller Skripte in /etc/cron.daily wird dann der Zeitstempel der Datei cron.daily im Ordner /var/spool/anacron/ neu gesetzt. Entscheidend für die Ausführung eines Scriptes ist der sogenannte shebang. Dies ist eine der häufugsten Fehlerquellen, weswegen ein Cronjob nicht ausgeführt wrden kann. /var/spool/anacron/ Des weiteren gibt es das Verzeichnis /var/spool/anacron/. Hier werden die Zeitstempel der einzelnen Aufgaben abgelegt. root@raspberrypi:~# ls -la /var/spool/anacron/ total 20 drwxr-xr-x 2 root root 4096 Mai 11 10:57 . drwxr-xr-x 6 root root 4096 Mai 10 17:05 .. -rw------- 1 root root 9 Mai 12 09:26 cron.daily -rw------- 1 root root 9 Mai 11 11:26 cron.monthly -rw------- 1 root root 9 Mai 11 11:26 cron.weekly Hier sieht man die Zeitstempel der anacron-Aufgaben. In diesem Beispiel hat cron.daily den Zeitstempel 12.05.2020. Dies bedeutet, dass an diesem Tag die tägliche(n) Aufgabe(n) durchgeführt wurde(n). Diese Aufgabe wird somit an diesem Tag nicht mehr durchgeführt. Am folgenden Tag wird der tägliche Job erneut ausgeführt und ein neuer Zeitstempel 20200513 eingefügt. root@raspberrypi:~# cat /var/spool/anacron/cron.daily 20200512 root@raspberrypi:~# cat /var/spool/anacron/cron.weekly 20200511 root@raspberrypi:~# cat /var/spool/anacron/cron.monthly 20200511 /lib/systemd/system/anacron.service Diese Datei bietet den systemd-Dienst für anacron. /lib/systemd/system/anacron.timer Diese Datei enthält den systemd-Timer für anacron. Derzeit wird der Dienst stündlich über den systemd-Timer ausgelöst.