Linux crontab tutorial mit Beispielen
Wenn Sie bereits Erfahrung als Linux-Systemadministrator haben, wissen Sie wahrscheinlich, was Cron ist und was es tut. Wenn Sie gerade erst anfangen, mit Linux zu arbeiten, ist es ein wesentliches Wissen, das Ihnen später sicherlich von Nutzen sein wird. In jedem Fall, wenn Sie bereits über das Wissen verfügen, wird es in diesem Artikel aufgefrischt. Wenn nicht, erhalten Sie einen Leitfaden, der Ihnen den Einstieg erleichtert. Es wird also nur erwartet, dass Sie über einige Grundkenntnisse von Linux-Systemen verfügen und wie üblich den Wunsch haben, zu lernen.
Crons Name stammt von Chronos, der griechischen Personifikation der Zeit. Und es ist eine sehr inspirierte Wahl, denn cron hilft Ihnen, verschiedene Aufgaben zu planen, die Ihr System zu bestimmten Zeiten ausführen soll. Wenn Sie Windows-Systeme verwendet haben, sind Sie wahrscheinlich über das Tool "Geplante Aufgaben" gestolpert. Im Allgemeinen ist der Zweck derselbe, die Unterschiede sind... naja, zu viele, um sie hier zu nennen.
Die Idee ist, dass Cron flexibler und für ernsthafte Systemverwaltungsaufgaben geeignet ist. Wenn Sie einige Beispiele für Anwendungsfälle benötigen, denken Sie einfach an Backups: Möchten Sie Backup-Aufgaben durchführen, wenn Sie für Hunderte von Computern verantwortlich sind? Wir dachten nicht. Sie schreiben einfach ein einfaches Bash-Skript mit rsync, planen es beispielsweise so, dass es täglich ausgeführt wird, und vergessen es. Alles, was Sie jetzt tun müssen, ist, von Zeit zu Zeit die Protokolle zu überprüfen. Wir kennen sogar Leute, die Cron verwenden, um sie an wichtige persönliche Ereignisse wie Geburtstage zu erinnern.
Aber cron ist nur ein Daemon, der die Aufgaben ausführt, die Sie ihm sagen. Gibt es ein Tool, das uns hilft, diese Aufgaben zu bearbeiten/hinzuzufügen/zu entfernen? Natürlich, und es heißt crontab (der Name kommt von cron table). Aber fangen wir mit dem Anfang an. Lesen Sie weiter, um zu erfahren, wie Sie Cron verwenden.
In diesem Tutorial lernen Sie:
- Ist es notwendig, cron unter Linux zu installieren?
- Wie man Cron, um Aufgaben zu planen
- Mehrere Crontab-Beispiele für jährliche, monatliche, tägliche Aufgaben usw.
- So verwenden Sie Cron-Dateien im Verzeichnis
/etc/
Muss ich cron installieren?
Die meisten Linux-Distributionen verwenden Vixie Cron oder ein Derivat (Fedora) als Standard-Cron-Implementierung, und das ist es, was wir in diesem Artikel verwenden werden. Außerdem ist Cron auf den meisten Distributionen bereits installiert, da es ein sehr wichtiger Bestandteil eines jeden Linux-Systems ist. Obwohl Sie als Desktop-Benutzer es möglicherweise nie direkt verwenden müssen, könnte dies auf Ihrem System oder einigen installierten Anwendungen der Fall sein (die regelmäßige Aktualisierung der manpages-Datenbank ist ein gutes Beispiel).
Im Grunde gibt es also nicht so viel, was wir in diesem Abschnitt schreiben können, weil die meisten Distributionen, die wir kennen, cron im Basissystem enthalten. Eine bemerkenswerte Ausnahme ist Gentoo, wo Sie vixie-cron von Hand installieren und zum Standard-Runlevel hinzufügen müssen. Arch, Debian und Slackware, auch alle Ubuntu-Versionen, Fedora und OpenSUSE haben alle cron in der Basis installiert und so eingerichtet, dass es beim Booten startet. Wir empfehlen (in der Tat dringend), dass Sie die Handbuchseiten cron und crontab lesen, da viele Linux-Distributionen ihre Software patchen, um sie besser mit dem Rest des Systems zu harmonieren.
Es besteht also die Möglichkeit, dass eine Funktion, die Sie zum Beispiel auf Gentoo finden, nicht auf Slackware verfügbar ist. Und sowieso ist nichts vergleichbar mit dem Lesen des Handbuchs, besonders wenn es sich um eine neue Software handelt, die Sie ziemlich oft verwenden werden.
Wie benutzt man Cron?
Lassen Sie uns nun Cron für sich arbeiten lassen. Zuerst müssen wir uns überlegen, welchen Befehl wir ausführen müssen. Sind Root-Rechte erforderlich oder nicht? Nehmen wir vorerst an, dass wir crontab verwenden werden, um ein einfaches Skript hinzuzufügen, das alle fünf Minuten als unser normaler Benutzer ausgeführt wird.
Cron-Beispiel
Lassen Sie uns ein einfaches Skript schreiben, das ein einfaches, auf Flüchen basierendes Dialogfeld in einem Terminal anzeigt (erfordert einen Dialog und einen Terminal-Emulator – wir werden hier xterm verwenden):
#!/bin/sh
xterm -e "dialog --msgbox 'Testing cron...' 234 234"
This is a very simple example, treat it as it is
Nennen Sie die Datei crontest.sh und machen Sie sie ausführbar, da alles, was von cron ausgeführt wird, ausführbar sein muss.
chmod +x crontest.sh
Und jetzt müssen wir die Crontab unseres Benutzers bearbeiten, um einen Eintrag für unser wunderbares Skript hinzuzufügen:
crontab -e
-e steht für Bearbeiten und -r steht für Entfernen.
Seien Sie sehr vorsichtig! Viele Systemadministratoren tippten aus Müdigkeit oder Unachtsamkeit
-r anstelle von -e, da die Schlüssel direkt nebeneinander liegen, und entfernten alle ihre Crontab-Einträge. Wie auch immer, Sie werden höchstwahrscheinlich eine kommentierte Datei sehen (crontab verwendet #'s für Kommentare), die Ihnen Beispiele gibt und erklärt, was jedes Feld tut. Ja, ein Crontab-Eintrag besteht aus Feldern, wobei das letzte Feld den auszuführenden Befehl angibt und der Rest zeitspezifische Einträge sind, wie wir sehen werden.
Unser Eintrag in crontab für unser Skript, das alle fünf Minuten ausgeführt werden soll, lautet nun:
*/5 * * * * export DISPLAY=:0 && /home/$user/crontest.sh
Wir müssen die DISPLAY-Variable für xterm exportieren, um uns keine E-Mail mit dem Fehler "DISPLAY is not set" zu senden. Sehen wir uns nun an, was die einzelnen Felder tun.
Crontab-Felder
Wenn Sie jemals Platzhalter verwendet haben, dann kennen Sie die Sternchen in crontab: Sie bedeuten "alle Werte abgleichen". Die Felder in einer Standard-Linux-Crontab (Vorsicht, einige andere Unix-Systeme könnten andere Cron-Implementierungen haben) bedeuten von links nach rechts: Minute, Stunde, Tag des Monats, Monat, Wochentag, Jahr (nicht obligatorisch) bzw. Befehl.
Wenn wir also unser Skript jedes Mal um fünf Minuten nach jeder vollen Stunde, jeden Tag, jeden Monat und jedes Jahr ausführen wollten, hätten wir dies einfach getan:
5 * * * * export DISPLAY=:0 && /home/$user/crontest.sh
Wir bitten Sie dringend, vorsichtig mit dem Feld für den Wochentag zu sein: Vielleicht ist in Ihrem Land der erste Tag der Woche der Montag, aber es gibt andere Kulturen, in denen der erste Tag der Woche auf den Sonntag festgelegt ist. Es gibt kulturelle und religiöse Unterschiede, auf die man achten muss, wenn man in einem multinationalen, multikulturellen Umfeld arbeitet.
Cron sendet standardmäßig Benachrichtigungen per E-Mail an den Benutzer, der den Job besitzt ($user@$hostname). Wenn Sie die Adresse ändern möchten, verwenden Sie einfach MAILTO=$email_address in Ihrer Crontab. Wenn Sie dies deaktivieren möchten, setzen Sie >/dev/null 2>&1 an das Ende Ihres Eintrags.
Wenn Sie es bereits satt haben, dass das Popup-Fenster alle fünf Minuten erscheint, verwenden Sie erneut crontab -e, um es zu löschen, oder, einfacher gesagt, kommentieren Sie es aus. Wenn Sie sehen möchten, was sich in Ihrer crontab befindet, verwenden Sie einfach die Option -l (list). Wir laden Sie ein, herumzuspielen, neue Einträge zu erstellen und zu sehen, ob sie so funktionieren, wie Sie es erwartet haben.
Cron-Dateien im Verzeichnis /etc
Was wir vorher gemacht haben, war nur etwas Triviales und potenziell Lustiges, um Ihnen den Einstieg zu erleichtern. Von nun an gehen wir davon aus, dass Sie sich um ein ernsthaftes Geschäft kümmern müssen, und gehen in diese Richtung. Der obige Untertitel bezieht sich auf Verzeichnisse in /etc, die sich um periodische Systemwartungsaufgaben kümmern.
Da wir bereits erwähnt haben, enthält unsere /etc/cron.weekly ein Skript namens man-db, das die Datenbank der Handbuchseiten aktualisiert. Dies sind Skripte, die mit Ihrer Distribution geliefert werden und gemäß der Datei /etc/crontab ausgeführt werden.
Da der beste Weg zum Lernen darin besteht, etwas zu recherchieren, sollten Sie sich die Zeit nehmen, diese Datei selbst durchzusehen. Sie werden ähnliche Einträge sehen wie zuvor, nur die auszuführenden Befehle unterscheiden sich. run-parts ist ein kleines Dienstprogramm, das entwickelt wurde, um alle Skripte in einem bestimmten Ordner auszuführen, der die Skripte in cron sind. stündlich, täglich, wöchentlich, monatlich}. Stellen Sie sicher, dass Sie verstehen, wann sie ausgeführt werden und warum diese Stunden/Tage so ausgewählt sind, wie sie sind.
Dem aufmerksamen Leser ist vielleicht aufgefallen, dass es in /etc/crontab ein Feld gibt, das beim Bearbeiten seiner Crontab nicht vorhanden war: ein Benutzerfeld. Die Erklärung ist einfach und der Grund ist die Sicherheit. Wenn Sie crontab -e als $user aufrufen, ist es sicher, dass jeder geplante Befehl wie $user ausgeführt wird.
Da /etc/crontab jedoch systemweit ist, scheint es notwendig zu sein, den Benutzer anzugeben, da es bestimmte Skripte oder Anwendungen geben könnte, die als ein anderer Benutzer ausgeführt werden müssen, nicht als root, insbesondere wenn der Systemadministrator sicherheitsbewusst ist und dem System bei Bedarf Benutzer und Gruppen hinzufügt.
Ein Beispiel: Für Backups benötigen Sie nicht die volle Leistung des Root-Benutzers, sondern nur die notwendigen Rechte zum Lesen und Schreiben bestimmter Speicherorte (es steckt noch mehr dahinter, aber halten wir es einfach). Der Administrator legt also eine Backups-Gruppe und einen backupadmin-Benutzer an, mit den notwendigen Rechten, und führt die nächtlichen Backup-Skripte per cron wie folgt aus:
30 23 * * * backupadmin /home/backupadmin/nightlybkup.sh
Dadurch wird das im letzten Feld angegebene Skript jede Nacht um 23:30 Uhr ausgeführt. Wenn wir nun möchten, dass Backups nur von Montag bis Freitag ausgeführt werden, hätten wir Folgendes getan:
30 23 * * 1-5 backupadmin /home/backupadmin/nightlybkup.sh
Wenn Sie nur nachts, aber nur montags, mittwochs und freitags Backups wünschen, ersetzen Sie 1-5 durch 1,3,5. Sobald Sie Ihre Füße nass gemacht haben und genau wissen, was Sie brauchen, wird Cron einfach zu bedienen und leicht zu verstehen sein.
Sicherheitsüberlegungen
Es gibt viele Situationen, in denen Sie nicht jedem Benutzer, der Zugriff auf Ihr System hat, erlauben möchten, Crontab-Einträge zu erstellen. Hier kommen /etc/cron.deny und /etc/cron.allow ins Spiel. Ihre Verwendung ist im Grunde die gleiche wie bei /etc/hosts.allow und /etc/hosts.deny, wenn Sie also diese Dateien in der Vergangenheit verwendet haben, werden Sie sich wie zu Hause fühlen. Diese beiden Dateien (cron.deny und cron.allow) existieren standardmäßig nicht, zumindest nicht auf den Systemen, mit denen wir arbeiten, daher ist das Standardverhalten, jedem zu erlauben, seine Crontab-Einträge zu haben. Sie können überprüfen, welche cron-bezogenen Dateien Sie in /etc mit
ls /etc | grep cron
Auch dies ist nur unter Linux der Fall, da das Fehlen dieser Dateien auf Solaris-Systemen genau das Gegenteil bedeutet, außerdem haben die Dateien unterschiedliche Speicherorte. cron.allow wird zuerst überprüft, daher geben wir normalerweise ALL in cron.deny ein und geben dann nur die Benutzer ein, denen wir in cron.allow Zugriff gewähren möchten.
Beispiele für Cron-Scheduler
Um sich mit der zunächst etwas verwirrenden Crontab-Syntax vertraut zu machen, haben wir eine Liste mit verschiedenen Beispielen zusammengestellt, die Aufgaben für alle möglichen Zeiten und Häufigkeiten planen.
Führen Sie jede Minute ein Skript aus:
* * * * * /usr/local/bin/check-disk-space.shDieser Befehl wird jede Minute, jeden Tag und jeden Monat ausgeführt.
Dieser Befehl führt das
checkdrive.shSkript jeden 10. Januar, Juni und Dezember um 02:30 Uhr aus.30 02 10 01,06,12 * /home/$user/bin/checkdrive.shFühren Sie das Skript jede halbe Stunde aus:
00,30 * * * * /home/$user/backupdata.shNur am Wochenende verfügbar:
* * * * 6,7 /usr/bin/weekendLaufen Sie zweimal täglich. Diese findet täglich um 11:20 Uhr und 16:20 Uhr statt.
20 11,16 * * * /usr/sbin/commandDiese findet jeweils am 2. Mai stündlich statt.
01 * 2 05 * /sbin/system_commandDer folgende Befehl wird von Montag bis Freitag alle 10 Minuten ausgeführt.
*/10 * * * 1-5 /usr/local/bin/check-disk-space.shDieser Befehl wird einmal während der Arbeitszeit und an Werktagen ausgeführt.
00 09-17 * * 1-5 /usr/local/bin/check-disk-space.shDieser Befehl wird nur einmal im Jahr, um Mitternacht, am 1. Januar ausgeführt
0 0 1 1 * /usr/local/bin/check-disk-space.shDieser Befehl wird zweimal im Jahr (alle 6 Monate) um 12 Uhr und 12 Uhr ausgeführt.
0 0,12 1 */6 * /usr/local/bin/check-disk-space.shDieser Befehl wird jeden 3. Donnerstag eines bestimmten Monats um 10 Uhr ausgeführt.
0 10 15-21 * 4 /usr/local/bin/check-disk-space.shDieser Befehl wird jeden Tag 20 Minuten nach jeder geraden Stunde (0:20, 2:20... 22:20).
20 0-23/2 * * * /usr/local/bin/check-disk-space.sh
Abschließende Gedanken
Auch wenn Sie Cron-Einträge anfangs vielleicht etwas entmutigend finden, werden Sie sich nach kurzer Zeit an die Reihenfolge und Bedeutung der Felder erinnern, und da Sie jetzt wissen, wo die zu bearbeitenden Dateien sind, wird die Planung mit Cron zum Kinderspiel. Alles, was es braucht, ist ein wenig Übung.

