GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Cron-Jobs und Crontab unter Linux erklärt

Dieses Tutorial ist eine vollständige Anleitung zum Verständnis von Cron unter Linux sowie zur Rolle der Crontab-Datei.

Als Systemadministrator verbringen Sie sehr wahrscheinlich viel Zeit mit wiederkehrenden Aufgaben auf Ihrem System .

Glücklicherweise gibt es eine Möglichkeit, Aufgaben auf Linux-Systemen zu automatisieren:Cron-Jobs .

Ursprünglich 1975 von den AT&T Bell Laboratories entwickelt, hat sich cron zu einer Referenz unter Linux entwickelt, wenn es um die Planung und Ausführung von Aufgaben zu festen Terminen oder Zeiträumen geht.

Im heutigen Tutorial werfen wir einen Blick auf den Cron-Daemon , cron-Jobs und der crontab-Befehl unter Linux.

Wir werden auch auf den Unterschied zwischen benutzerdefinierten Cron-Jobs und systemdefinierten Cron-Jobs hinweisen.

Bereit?

Was sind Cron und Cron-Jobs?

Cron ist ein System-Daemon, der auf jedem Linux-System ausgeführt wird und dafür verantwortlich ist, Cron-Jobs zu erkennen und sie in bestimmten Intervallen auszuführen.

Cron wird jede Minute ausgeführt und überprüft eine Reihe vordefinierter Verzeichnisse in Ihrem Dateisystem, um festzustellen, ob Jobs ausgeführt werden müssen.

Auf der anderen Seite sind Cron-Jobs Aufgaben, die so definiert sind, dass sie in bestimmten Intervallen oder Perioden ausgeführt werden, normalerweise Shell-Skripte oder einfache Bash-Befehle.

Cron-Jobs werden normalerweise verwendet, um bestimmte Ereignisse in Ihren Syslog-Dienstprogrammen zu protokollieren oder Sicherungsvorgänge auf Ihrem Host zu planen (wie Datenbanksicherungen oder Dateisystemsicherungen).

Bei einem Linux-Betriebssystem, auf dem systemd als Dienstmanager ausgeführt wird, können Sie den Cron-Dienst überprüfen, indem Sie den folgenden Befehl ausführen

$ sudo systemctl status cron.service

Hinweis :Sie benötigen sudo-Berechtigungen, um Systemdienste mit systemd zu inspizieren

Was ist die Cron-Job-Syntax?

Das Wichtigste, was Sie über Cron wissen müssen, ist wahrscheinlich die Cron-Job-Syntax.

Um einen Cronjob zu definieren, definieren Sie:

  • Periodizität :bedeutet, wann Ihr Job im Laufe der Zeit ausgeführt wird. Sie können es so definieren, dass es jeden ersten Tag des Monats, alle 5 Minuten oder an einem ganz bestimmten Tag im Jahr ausgeführt wird. Beispiele werden später in diesem Artikel gegeben;
  • Befehl :buchstäblich der Befehl, der vom cron-Dienstprogramm ausgeführt werden soll, es kann ein Sicherungsbefehl oder ein beliebiger Befehl sein, den Sie normalerweise in einer Shell ausführen würden;
  • Benutzer :Dies ist für systemdefinierte Cron-Jobs reserviert, bei denen Sie den Benutzer angeben möchten, der den Cron-Befehl ausführen soll. Für benutzerdefinierte Cron-Jobs müssen Sie keinen Benutzer angeben, und Ihr System führt sie standardmäßig als Root aus.

Wie Sie wahrscheinlich bemerkt haben, besteht die Periodizitätsspalte aus 5 Spalten.

Jede einzelne Spalte kann entweder auf * gesetzt werden , was bedeutet, dass der Befehl für jeden einzelnen Wert des angegebenen Intervalls oder für einen bestimmten Wert ausgeführt wird, beispielsweise für den 6. Monat des Jahres.

Wenn Sie einen Befehl für jede Minute, jede Stunde, jeden Tag des Monats, jeden Monats ausführen möchten , würden Sie den folgenden Befehl eingeben

* * * * *  logger "This is a command executed every minute"

Wenn Sie alle 30 Minuten einen Befehl ausführen möchten , würden Sie schreiben

*/30 * * * * logger "This is executed every 30 minutes"

Andererseits, wenn Sie am ersten Tag des Monats um Mitternacht einen Befehl ausführen möchten , würden Sie schreiben

0 0 1 * * logger "This is executed on the first day of the month, at midnight"

Bei der Definition dieser Cron-Jobs musste ich den Benutzer, der sie ausführt, nicht angeben.

Dies liegt daran, dass es einen Unterschied zwischen benutzerdefinierten Cron-Jobs und systemdefinierten Cron-Jobs gibt.

Benutzerdefinierte Cron-Jobs

Benutzerdefinierte Cron-Jobs sind Cron-Jobs, die von einem bestimmten Benutzer auf dem Host definiert werden. Das bedeutet nicht, dass es keine Befehle ausführen kann, die das gesamte System betreffen, aber seine Aufgaben sind auf bestimmte Ordner auf dem Host isoliert.

Jeder Benutzer kann seine eigenen Cron-Jobs auf einem Linux-Host haben.

Benutzerdefinierte Cron-Jobs auflisten

Wenn Sie mit einem bestimmten Benutzer verbunden sind, führen Sie diesen Befehl aus, um die Cron-Jobs anzuzeigen, die dem Benutzer gehören

$ crontab -l

Wenn Sie Cronjobs besitzen, werden diese sofort auf der Standardausgabe angezeigt.

Standardmäßig werden benutzerdefinierte Cron-Jobs im Verzeichnis /var/spool/cron/crontabs gespeichert, aber Sie müssen root sein, um es zu durchsuchen.

Hinzufügen benutzerdefinierter Cron-Jobs

Um die Cron-Jobs zu bearbeiten, die sich auf den Benutzer beziehen, mit dem Sie verbunden sind, führen Sie den folgenden Befehl aus

$ crontab -e

Standardmäßig öffnet Ihr Host Ihren Standard-Editor und Sie können Ihre Cron-Jobs auf dem System ausführen.

Fügen Sie am Ende der Datei eine neue Zeile hinzu, z. B. mit der folgenden Zeile

* * * * * logger "This is a log command from devconnected"

Logger ist ein Befehl, mit dem Benutzer benutzerdefinierte Nachrichten in Protokolle schreiben können. Wenn Sie eine vollständige Anleitung zu Protokollierung und Syslog benötigen, haben wir eine vollständige Beschreibung dazu.

Sie müssen keinen Benutzer angeben, da das System bereits weiß, welcher Benutzer diesen Befehl definiert.

Außerdem wird der Befehl als aktueller Benutzer ausgeführt standardmäßig.

Sie müssen keine Dienste neu starten, Ihr Job wird beim nächsten Auftreten berücksichtigt.

In Anbetracht des zuvor angegebenen Beispiels überprüfen Sie Ihre Protokolle, um zu sehen, wie Ihr Cron-Job ausgeführt wird

$ sudo journalctl -xfn

Wie Sie sehen können, hat der Cron-Dienst benutzerspezifische Verzeichnisse auf dem Host inspiziert (in /var/spool/cron/crontabs ), es hat eine Sitzung als mein aktueller Benutzer geöffnet, den Befehl ausgeführt und die Sitzung geschlossen.

Fantastisch!

Sie haben gelernt, wie Sie benutzerdefinierte Cron-Jobs auf Ihrem Host definieren können.

Benutzerdefinierte Cron-Jobs entfernen

Um benutzerdefinierte Cronjobs zu entfernen, verwenden Sie den folgenden Befehl

$ crontab -r
(or)
$ crontab -ri

Crontab wird für Ihren aktuellen Benutzer gelöscht (systemdefinierte Cron-Jobs werden nicht gelöscht).

Führen Sie eine Cron-Job-Liste aus, um zu überprüfen, ob alle Cron-Jobs gelöscht wurden

Systemdefinierte Cronjobs

Systemdefinierte Cron-Jobs sind Jobs, die in freigegebenen Verzeichnissen im Dateisystem definiert sind.

Vorausgesetzt, Sie haben sudo-Berechtigungen auf dem Host, bedeutet dies, dass Sie Cron-Jobs definieren können, die von anderen Administratoren auf Ihrem System geändert werden können.

Verzeichnisse, die sich auf systemdefinierte Cron-Jobs beziehen, befinden sich im etc-Verzeichnis und können durch Ausführen von

angezeigt werden
$ ls -l | grep cron

Wie Sie sehen können, enthält dieser Ordner viele verschiedene Ordner und Dateien:

  • anacrontab :eine vom Anacron-Dienst unter Linux verwendete Datei, die in einem der nächsten Abschnitte erklärt wird.
  • cron.d :Ein Verzeichnis, das eine Liste von Cron-Jobs enthält, die vom Cron-Dienst gelesen werden sollen. Die Dateien in cron.d werden mit der Cron-Syntax geschrieben, die wir zuvor gesehen haben;
  • cron.daily :Ein Verzeichnis, das eine Liste von Skripten enthält, die täglich vom System ausgeführt werden sollen. Dateien unterscheiden sich von den Dateien im Verzeichnis cron.d, da es sich um echte Bash-Skripte handelt und nicht um Cron-Jobs, die mit Cron-Syntax geschrieben wurden;
  • cron.hourly, cron.monthly, cron.weekly sind selbsterklärend, sie enthalten Skripte, die jede Stunde, jeden Monat und jede Woche des Jahres ausgeführt werden;
  • crontab :Eine mit Cron-Syntax geschriebene Cron-Datei, die den Cron-Dienst anweist, Jobs auszuführen, die sich in den Ordnern „Daily“, „Hourly“, „Monthly“ und „Weekly“ befinden. Es kann auch benutzerdefinierte Jobs ähnlich wie benutzerdefinierte Cron-Jobs definieren, außer dass Sie den Benutzer angeben müssen, der den Befehl ausführen soll.

Systemdefinierte Cron-Jobs auflisten

Wie Sie wahrscheinlich verstanden haben, sind Cron-Jobs, die in globalen Konfigurationsordnern definiert sind, über mehrere Ordner verteilt.

Darüber hinaus können in diesen Ordnern mehrere Cron-Dateien definiert werden.

Mit der Befehlszeile gibt es jedoch eine effiziente Möglichkeit, alle Dateien in einem bestimmten Verzeichnis zu verketten.

Führen Sie den folgenden Befehl aus

, um alle in cron.d definierten Cron-Jobs aufzulisten
$ cat /etc/cron.d/*

Führen Sie in ähnlicher Weise den folgenden Befehl aus, um in der Crontab-Datei definierte Cron-Jobs aufzulisten

$ cat /etc/crontab

In ähnlicher Weise können Sie alle Skripts überprüfen, die täglich ausgeführt werden sollen

ls -l /etc/cron.daily/

Systemdefinierte Cron-Jobs hinzufügen

Wie Sie wahrscheinlich verstanden haben, gibt es mehrere Möglichkeiten, systemdefinierte Cron-Jobs hinzuzufügen.

Sie können eine Cron-Datei in cron.d erstellen, und die Datei wird jede Minute auf Änderungen überprüft.

Sie können Ihren Cron-Job auch direkt zur Crontab-Datei hinzufügen. Wenn Sie jede Minute oder jede Stunde eine Aufgabe ausführen möchten, wird empfohlen, Ihr Skript hinzuzufügen direkt in die entsprechenden Cron-Verzeichnisse.

Der einzige Unterschied zu benutzerdefinierten Cron-Jobs besteht darin, dass Sie einen Benutzer angeben müssen, der den Cron-Befehl ausführt.

Erstellen Sie beispielsweise eine neue Datei im Verzeichnis cron.d und fügen Sie ihr den folgenden Inhalt hinzu (Sie benötigen offensichtlich sudo-Berechtigungen, damit die Befehle ausgeführt werden können)

$ sudo nano /etc/cron.d/custom-cron

*/1 * * * *    root    logger 'This is a cron from cron.d'

Auch hier müssen Sie keine Dienste neu starten, der Cron-Dienst überprüft Ihre Datei bei der nächsten Iteration.

Um Ihren Cron-Job in Aktion zu sehen, führen Sie den folgenden Befehl aus

$ sudo journalctl -xfn 100 | grep logger

Das sollten Sie auf Ihrem Bildschirm sehen

Großartig!

Wie Sie sehen können, wird Ihr Job jetzt jede Minute vom Root-Benutzer auf Ihrem Host ausgeführt.

Nachdem Sie nun eine vollständige Vorstellung davon haben, was benutzerdefinierte Cron-Jobs und systemdefinierte Cron-Jobs sind, sehen wir uns den vollständigen Cron-Lebenszyklus auf einem Linux-Host an.

Cron Complete Cycle unter Linux

Hier ist ohne weiteres der komplette Cron-Zyklus unter Linux.

Das macht Ihr Cron-Dienst jede Minute, ebenso wie alle inspizierten Verzeichnisse.

Cron prüft die benutzerdefinierten Cron-Jobs und bei Bedarf ausführen.

Außerdem wird die crontab überprüft Datei, in der standardmäßig mehrere Standard-Cronjobs definiert sind.

Diese Standard-Cronjobs sind Skripte, die Ihren Host anweisen, jede Minute, jede Stunde, jeden Tag und jede Woche bestimmte Ordner zu überprüfen und die darin enthaltenen Skripte auszuführen.

Abschließend wird das cron.d-Verzeichnis überprüft . Die cron.d kann benutzerdefinierte Cron-Dateien enthalten und enthält auch eine sehr wichtige Datei, die Anacron-Cron-Datei.

Anacron-Cron-Datei unter Linux

Die Cron-Datei von Anacron ist eine Datei, die jede halbe Stunde zwischen 7:00 und 23:00 Uhr ausgeführt wird

Die Cron-Datei von Anacron ist für den Aufruf des Anacron-Dienstes verantwortlich .

Der Anacron-Dienst ist ein Dienst, der für die Ausführung von Cron-Jobs verantwortlich ist, falls Ihr Computer sie überhaupt nicht ausführen konnte.

Angenommen, Ihr Computer ist ausgeschaltet, aber Sie hätten einen Cron-Job, der jede Woche für die Ausführung von Update-Skripten verantwortlich ist.

Wenn Sie Ihren Computer einschalten, wird der Anacron-Dienst daher feststellen, dass Sie den Update-Cron zuvor nicht starten konnten, anstatt eine ganze Woche auf die Ausführung dieser Update-Skripte zu warten.

Anacron fährt dann fort, den Cron-Job auszuführen, damit Ihr System aktualisiert wird.

Standardmäßig wird die Cron-Datei von anacron angewiesen, zu überprüfen, ob die Verzeichnisse cron.daily, cron.weekly, cron.hourly und cron.monthly in der Vergangenheit korrekt aufgerufen wurden.

Wenn anacron feststellt, dass die Cron-Jobs im Ordner cron.monthly nicht ausgeführt wurden, ist es für deren Ausführung zuständig.

Schlussfolgerung

Heute haben Sie gelernt, wie cron und crontab unter Linux funktionieren.

Sie hatten auch eine vollständige Einführung in die Cron-Syntax und wie Sie Ihre eigenen Cron-Skripte als Benutzer auf Ihrem Host definieren.

Endlich hatten Sie einen vollständigen Cron-Zyklus-Überblick darüber, wie die Dinge auf Ihrem Host funktionieren und was Anacron ist.

Wenn Sie sich für die Linux-Systemadministration interessieren, haben wir einen vollständigen Abschnitt darüber auf unserer Website. Klicken Sie auf das Bild unten, um es anzusehen.


Linux
  1. So verwenden Sie Cron unter Linux

  2. So automatisieren Sie Aufgaben in Linux mit Crontab

  3. Linux-Befehle:jobs, bg und fg

  4. So planen Sie Cron-Jobs mit Crontab

  5. Linux:Cronjob im Vordergrund ausführen

Crontab in Linux mit Beispielen verstehen

Linux-crontab-Befehl zum Erstellen und Verwalten von Cron-Jobs

Wie man Cron-Jobs für ein Linux-System über PHP ausführt und auflistet

Linux Crontab:15 fantastische Cron-Job-Beispiele

So planen Sie Jobs mit Cron in Linux

10 nützliche Cron-Beispiele zum Planen von Jobs unter Linux