So führen Sie regelmäßig Befehle mit anacron unter Linux aus
Wenn wir eine Aufgabe auf einem Linux-System planen müssen, können wir Dienstprogramme wie cron oder systemd-timer verwenden. Es gibt verschiedene Implementierungen von Cron, aber sie haben die Tatsache gemeinsam, dass sie als Systemdienst ausgeführt werden und für den Einsatz auf Systemen konzipiert sind, die immer in Betrieb sind, wie z.B. Server. Wenn wir eine Aufgabe auf einem Desktop oder einem Notebook planen müssen, die häufiger ausgeschaltet sind, können wir stattdessen Anacron verwenden.
In diesem Artikel erfahren wir, was Anacron ist, was die Unterschiede zwischen Anacron und Cron sind und wie man Anacron verwendet, um Befehle unter Linux zu planen.
In diesem Tutorial lernen Sie:
- So installieren Sie Anacron auf einigen der am häufigsten verwendeten Linux-Distributionen
- Was ist Anacron und was sind die Unterschiede zwischen Anacron und Cron?
- Wie ein anacrontab aufgebaut ist
- So führen Sie anacron als unprivilegierter Benutzer aus
Installation
Anacron (und Cron) werden normalerweise standardmäßig auf allen Linux-Distributionen installiert, aber wenn wir sie aus dem einen oder anderen Grund explizit installieren müssen, können wir die folgenden Befehle verwenden. Auf Fedora und den anderen Distributionen, die Teil der RHEL-Familie sind, verwenden wir den dnf-Paketmanager, um die Installation der Pakete "cronie" und "cronie-anacron" durchzuführen (cronie ist die Cron-Implementierung, die auf diesen Distributionen verwendet wird):
sudo dnf install cronie cronie-anacron
Unter Debian und anderen Debian-basierten Distributionen verwenden wir den folgenden Befehl, um die gleiche Operation durchzuführen:
sudo apt install anacron cronUnter Archlinux sind cron und anacron nicht standardmäßig installiert, da die Distribution systemd-timers als Standardmethode zum Planen von Aufgaben verwendet. Die Installation der Pakete ist jedoch nur eine Frage des Startens des Pacman-Paketmanagers und der Ausgabe des folgenden Befehls:
sudo pacman -Sy cronieAnacron gegen Cron
Was sind also die Hauptunterschiede zwischen Anacron und Cron? Zunächst einmal läuft cron als Daemon: Er läuft im Hintergrund und soll Jobs auf Systemen einplanen, die kontinuierlich laufen. Mit cron können wir die Ausführungszeiten von Jobs in der Größenordnung von Minuten feinabstimmen. Anacron hingegen ist kein Daemon, sondern ein Befehl, der direkt aufgerufen werden soll: Es ist nützlich, Jobs auf dem Computer als Desktops oder Laptops zu planen, von denen nicht garantiert werden kann, dass sie immer laufen. Damit können wir Jobs planen, die maximal einmal pro Tag ausgeführt werden sollen.
Wie anacron funktioniert
Anacron funktioniert im Grunde so: Beim Start liest es Jobs, die in der Anacrontab geplant sind, was für Anacron das ist, was eine Crontab für Cron ist. Es überprüft die Häufigkeit in Tagen für jeden Job und prüft, ob dieser Job in der angegebenen Anzahl von Tagen ausgeführt wurde: Dies geschieht durch Speichern von Job-Zeitstempeln im sogenannten Spooldir, das standardmäßig /var/spool/anacron ist. Wenn ein Job nicht innerhalb der angegebenen Anzahl von Tagen gestartet wurde (z. B. wenn die Maschine ausgeschaltet wurde), wird er nach einer bestimmten Anzahl von Minuten Verzögerung ausgeführt.
Wie bereits erwähnt, ist Anacron kein Daemon, daher muss es als Befehl aufgerufen werden. In den allermeisten Fällen wird der Aufruf von anacron stündlich über cron geplant. Auf Fedora wird anacron beispielsweise über das Skript /etc/cron.hourly/0anacron aufgerufen.
Das anacrontab
Die anacrontab-Struktur unterscheidet sich von der klassischen crontab. Die Standard-Anacrontab, die von cron verwendet wird, ist normalerweise /etc/anacrontab, aber wie wir später in diesem Artikel sehen werden, können beim Starten von Anacron andere angegeben werden. Eine Anacrontab besteht aus vier Spalten, die in der angegebenen Reihenfolge angegeben werden:
- Die Häufigkeit von Aufträgen in Tagen
- Die für den Auftrag zu verwendende Verzögerung in Minuten
- Die Job-ID
- Der auszuführende Befehl
Werfen Sie als Beispiel einen Blick auf den Inhalt des Standard-Anacrontabs in der neuesten Version von Fedora:
/etc/anacrontab: configuration file for anacron
See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
Wie wir sehen können, enthält das anacrontab neben den Job-Spezifikationen auch einige Umgebungsvariablen. Die Variablen SHELL und PATH sind ziemlich selbsterklärend: Sie geben an, welche Shell als Interpreter verwendet werden soll bzw. welcher PATH verwendet werden soll.
Die Variable MAILTO wird verwendet, um die E-Mail-Adresse anzugeben, an die eine E-Mail mit der Ausgabe von Befehlen gesendet werden soll (standardmäßig wird die E-Mail an den Besitzer der Anacrontab, in diesem Fall root, gesendet). Damit dies funktioniert, muss ein Dienst wie sendmail auf dem System konfiguriert werden. Um diese Funktionalität zu deaktivieren, können wir der Variablen einfach einen leeren Wert zuweisen (z.B. MAILTO="").
Die Variable RANDOM_DELAY gibt die maximale Anzahl von Minuten an, die nach dem Zufallsprinzip zu jeder Auftragsverzögerung hinzugefügt werden. Um diese Funktion zu deaktivieren, können wir einfach 0 als Wert setzen. Schließlich wird die Variable START_HOURS_RANGE verwendet, um ein Stundenintervall zu definieren, in dem Jobs ausgeführt werden dürfen. Hier sollten wir den Stundenbereich auswählen, in dem wir sicher sind, dass die Maschine eingeschaltet ist.
Sehen wir uns an, wie Aufträge angegeben werden. In der ersten Spalte finden wir, wie wir bereits gesehen haben, die Häufigkeit der Ausführung für jeden Job, angegeben in Tagen. Hier können wir direkt eine Ganzzahl verwenden oder ein Makro wie @daily, @weekly oder @monthly verwenden.
Die zweite Spalte enthält die für den Auftrag zu verwendende Verzögerung, angegeben in Minuten. Die Verzögerung wird angewendet, wenn Anacron aufgerufen wird und entscheidet, dass der Befehl ausgeführt werden soll.
Die dritte Spalte enthält die Kennung, die verwendet wird, um auf die Aufgaben in Protokolldateien zu verweisen. Schließlich enthält die vierte und letzte Spalte den Befehl, der ausgeführt werden soll. Dabei kann es sich um einen direkten Befehl oder den Pfad zu einem Skript handeln.
So planen Sie Jobs mit anacron als nicht privilegierte Benutzer
Wie wir bereits in diesem Tutorial erwähnt haben, werden Befehle, die mit anacron geplant sind, als root ausgeführt und im System anacrontab definiert, das /etc/anacrontab ist. Zeitstempel von Jobs werden stattdessen im Verzeichnis /var/spool/anacron gespeichert. Um anacron als unprivilegierter Benutzer verwenden zu können, müssen wir das benutzerspezifische Äquivalent dieser Dateien erstellen. Unser Job-Zeitplan wird im Verzeichnis ~/.local/etc/anacrontab gespeichert, und wir werden das Verzeichnis ~/.local/var/spool/anacron erstellen und verwenden, um Zeitstempel von Jobs zu speichern, die darin definiert sind:
mkdir -p ~/.local/var/spool/anacronAls Abkürzung können wir das System anacrontab lokal kopieren und nach Belieben modifizieren:
mkdir -p ~/.local/etc && cp /etc/anacrontab ~/.local/etcMöglicherweise möchten wir den Wert einiger der in der anacrontab enthaltenen Variablen ändern, z. B. den von MAILTO. Wir können jetzt unsere Job-Zeitpläne innerhalb der lokalen Anacrontab definieren. Als letzten Schritt müssen wir sicherstellen, dass anacron stündlich aufgerufen wird. Um diese Aufgabe zu erfüllen, können wir einen Eintrag in unserer lokalen Crontab erstellen. Um unsere lokale Crontab zu bearbeiten, führen wir den folgenden Befehl aus:
crontab -eSobald wir den obigen Befehl ausführen, wird unsere persönliche Crontab mit unserem Standard-Texteditor geöffnet. Um anacron zu Beginn jeder Stunde auszuführen, fügen wir die folgende Zeile hinzu:
0 * * * * /usr/sbin/anacron -s -t "${HOME}/.local/etc/anacrontab" -S "${HOME}/.local/var/spool/anacron"Im Eintrag rufen wir anacron mit der Option -s auf, so dass die geplanten Jobs nacheinander ausgeführt werden. Um die Datei anzugeben, die wir als anacrontab verwenden möchten, verwenden wir die Option -t und übergeben den Pfad der Datei als Argument. Schließlich verwenden wir die Option -S, um das Verzeichnis anzugeben, das zum Speichern von Zeitstempeln von Jobs verwendet werden soll.
Schlüsse
In diesem Tutorial haben wir gelernt, wie man mit Anacron Jobs auf Systemen plant, die im Gegensatz zu Servern nicht garantiert immer laufen. Wir haben kurz die Unterschiede zwischen anacron und cron gesehen, wie man anacron auf einigen der am häufigsten verwendeten Linux-Distributionen installiert, wie anacron funktioniert und wie ein anacrontab organisiert ist. Schließlich haben wir gesehen, wie man eine nicht privilegierte Anacron-Instanz pro Benutzer implementiert.
