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

Planen von Systemaufgaben mit Cron unter Linux

Cron ist ein Scheduling-Daemon, der Cron-Jobs in bestimmten Intervallen ausführt. Cron-Jobs automatisieren die Systemwartung, sich wiederholende oder administrative Aufgaben wie Datenbank- oder Datensicherung, Systemaktualisierungen, Überprüfung der Speicherplatznutzung, E-Mail-Versand und so weiter.

Sie können Cron-Jobs so planen, dass sie minutenweise, stündlich, wochentags, monatlich, monatlich oder einer beliebigen Kombination davon ausgeführt werden.

Warum Cron?

  • Cron gibt Ihnen die Kontrolle darüber, wann Ihr Job oder Ihre Aufgabe ausgeführt wird. Beispielsweise können Sie die Ausführung in Minute, Stunde, Tag usw. steuern
  • Cron-Jobs belegen keinen Speicher, wenn sie nicht ausgeführt werden.
  • Es eliminiert die Notwendigkeit, Schleifen- und Logikcode für die Aufgabe zu schreiben.
  • Wenn ein Job aus irgendeinem Grund nicht ausgeführt werden kann, wird er im nächsten Zeitintervall erneut ausgeführt.

Installieren Sie den Cron-Daemon und führen Sie ihn aus

Das Cron-Dienstprogramm in Linux wird mit dem Cronie-Paket installiert, das die Cron-Dienste bereitstellt.

Überprüfen Sie, ob das Cronie-Paket installiert ist oder nicht.

[tuts@fosslinux ~]$ rpm -q cronie
cronie-1.5.7-1.fc33.x86_64

Wenn das Cronie-Paket nicht vorhanden ist, installieren Sie es mit dem folgenden Befehl für Fedora-Benutzer.

[tuts@fosslinux ~]$ sudo dnf install cronie

Bevor Sie Aufgaben planen, müssen Sie den Crond-Dienst (Cron-Daemon) starten.

Überprüfen Sie, ob der Crond-Dienst läuft oder nicht.

[tuts@fosslinux ~]$ systemctl status crond.service
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor pre>
Active: active (running) since Tue 2021-06-08 09:14:40 EAT; 2h 58min ago
Main PID: 1671 (crond)
Tasks: 1 (limit: 3448)
Memory: 14.4M
CPU: 316ms
CGroup: /system.slice/crond.service
└─1671 /usr/sbin/crond -n

Der Dienst läuft, wenn der Befehl anzeigt ( Aktiv:aktiv (läuft). Wenn der crond-Dienst nicht läuft, starten Sie ihn in der aktuellen Sitzung mit dem folgenden Befehl.

[tuts@fosslinux ~]$ systemctl start crond.service

Mit dem folgenden Befehl können Sie den Dienst auch so konfigurieren, dass er beim Booten automatisch gestartet und ausgeführt wird.

[tuts@fosslinux ~]$ systemctl enable crond.service

Sie können den crond-Dienst mit dem Befehl stop stoppen.

[tuts@fosslinux ~]$ systemctl stop crond.service

Sie können es auch mit dem Neustart-Befehl neu starten:

[tuts@fosslinux ~]$ systemctl restart crond.service

Cronjob definieren

Um zu verstehen, wie Cron-Jobs funktionieren, sehen wir uns ein Cron-Job-Beispiel und die Teile an, aus denen eine Crontab-Konfigurationsdatei besteht.
Beispiel:Ein Cron-Job, um die neuesten Änderungen eines Git-Master-Zweigs abzurufen.

*/55 * * * *
username cd /home/username/project/shop_app && git pull origin master

Der obige Cron-Job besteht aus zwei Hauptteilen:

  1.  Der erste Teil (*/55 * * * * ) stellt den Timer so ein, dass er alle 55 Minuten ausgeführt wird.
  2.  Der zweite Teil der Cronjob-Konfiguration definiert Anweisungen, wie sie von der Befehlszeile ausgeführt würden. Der Befehl wird als Benutzer (Benutzername) ausgeführt und ändert dann das Verzeichnis in (/home/Benutzername/Projekt/Shop_App). Der letzte Teil führt den git-Befehl aus, um die neuesten Änderungen in den Master-Zweig Ihres Projekts zu ziehen.

Crontab verwenden, um einen Cronjob zu erstellen

Als Faustregel gilt, dass Sie Cron-Dateien nicht direkt bearbeiten sollten. Verwenden Sie stattdessen den Befehl crontab, um die in Ihrem System ausgeführten Cron-Jobs zu erstellen, zu bearbeiten, zu installieren, zu deinstallieren oder aufzulisten. Sobald Sie Cron-Jobs definiert haben, werden sie im Hintergrund ausgeführt, und der Daemon sucht ständig nach neuen Cron-Jobs in den Verzeichnissen /etc/crontab, /etc/cron.*/ und /var/spool/cron/.

Auf RedHat basierende Distributionen wie Fedora speichern Crontab-Dateien im Verzeichnis /var/spool/cron, während Debian- und Ubuntu-Distributionen im Verzeichnis /var/spool/cron/crontabs gespeichert werden. Systemweite Crontab-Dateien und Skripte werden in der Datei etc/crontab bzw. im Verzeichnis /etc/cron.d gespeichert.

Beachten Sie, dass Sie Cron nicht neu starten müssen, nachdem Sie neue Konfigurationsdateien erstellt oder vorhandene bearbeitet haben.

Crontab-Zeitsyntax und -operatoren

Der erste Teil einer Cron-Job-Definition sind die Timing-Informationen. Es bestimmt, wann und wie oft der Cronjob ausgeführt wird. Es besteht aus Minute, Stunde, Tag des Monats, Monat, Wochentag in dieser Reihenfolge. Sie können einen oder mehrere Werte angeben, die durch ein Komma oder einen Bindestrich getrennt sind.

.---------------- minute (0 - 59)
| .------------- hour (0 - 23)
| | .---------- day of month (1 - 31)
| | | .------- month (1 - 12) OR jan,feb,mar,apr …
| | | | .---- day of week (0-6) (Sunday=0 or 7) OR sun,mon,tue,wed,thr,fri,sat
| | | | | 
| | | | | 
* * * * * username cron job command to be executed
  • * – Sie können ein Sternchen anstelle eines Werts verwenden, um alle möglichen Werte für diese Position darzustellen, wenn Sie die Ausführungszeit definieren. Wenn Sie beispielsweise ein Sternchen an der Minutenposition verwenden, wird der Cron-Job jede Minute ausgeführt.
  • – Ein Komma gibt eine Liste von Werten für die Wiederholung an. Wenn Sie beispielsweise 2, 3, 6 im Feld Stunde angeben, wird der Cron-Job um 2 Uhr, 3 Uhr und 6 Uhr ausgeführt.
  • – – Der Bindestrich gibt einen Wertebereich an. Wenn Sie beispielsweise 2-6 im Wochentagfeld haben, wird der Cronjob jeden Wochentag von Dienstag bis Samstag ausgeführt.
  • / – Der Slash-Operator gibt Werte an, die in einem bestimmten Intervall wiederholt werden. Beispielsweise gibt */6 im Stundenfeld an, dass der Cron-Job alle sechs Stunden ausgeführt wird. Es ähnelt der Angabe von 0,6,12,18.

Vordefinierte Makros

Cron verfügt über mehrere spezielle Zeitplanmakros, mit denen Sie allgemeine Intervalle festlegen können. Sie können sie anstelle von Datums- und Zeitangaben verwenden.

  • @reboot – Die angegebene Aufgabe wird beim Systemstart ausgeführt.
  •  @yearly oder @annually – Die angegebene Aufgabe wird einmal im Jahr am 1. Januar um Mitternacht ausgeführt. Es ist ähnlich wie 0 0 1 1 *.
  • @monthly – Die Aufgabe wird einmal im Monat am ersten Tag des Monats um Mitternacht ausgeführt. Es ist ähnlich wie 0 0 1 * *.
  • @weekly – Die angegebene Aufgabe wird einmal pro Woche am Sonntag um Mitternacht ausgeführt. Es entspricht 0 0 * * 0.
  • @daily – Die angegebene Aufgabe wird einmal täglich um Mitternacht ausgeführt. Es entspricht 0 0 * * *.
  • @hourly – Die Aufgabe wird einmal pro Stunde zu Beginn der Stunde ausgeführt. Es ist ähnlich wie 0 * * * *.

Crontab-Befehl

Mit dem Befehl crontab können Sie eine crontab-Datei installieren, öffnen oder anzeigen.

Erstellen Sie eine Crontab-Datei oder öffnen Sie eine vorhandene mit dem folgenden Befehl:

$ crontab -e

Der Befehl öffnet standardmäßig den vi-Editor und erlaubt Ihnen, die Cron-Jobs zu definieren, die Sie in Ihrem System ausführen möchten.

Listen Sie alle Cron-Jobs in Ihrem System auf und zeigen Sie den Inhalt der Crontab-Datei an:

$ crontab -l

Cron-Jobs für einen bestimmten Benutzer mit der Option -u auflisten:

$ crontab -u username -l

Entfernen Sie alle Cron-Jobs mit dem Befehl -r:

$ crontab -r

Entfernen Sie Cron-Jobs für einen bestimmten Benutzer mit dem Befehl -r -u als Root-Benutzer:

$ crontab -r -u username

Entfernen Sie die aktuelle crontab-Datei mit einer Aufforderung vor dem Entfernen.

$ crontab -i

Crontab-Variablen

  •  PATH=/usr/bin:/bin ist der standardmäßige Crontab-Pfad. Sie können jedoch einen Pfad zu dem auszuführenden Befehl definieren oder die cron $PATH-Variable ändern.
  • bin/sh ist die Standard-Shell.
  • Die MAILTO-Umgebung definiert den Eigentümer der crontab zum Senden von E-Mail-Benachrichtigungen. Sie können die Variable mit einer durch Kommas getrennten Liste aller E-Mail-Adressen anhängen, um E-Mail-Benachrichtigungen zu erhalten. Beachten Sie, dass keine E-Mails gesendet werden, wenn die MAILTO-Variable leer ist (d. h. MAILTO=” “).

Beispiele für Cron-Jobs

Der folgende Cron-Job wird jede Minute ausgeführt:

* * * * * [cron job command]

Der folgende Cron-Job wird sechsmal pro Stunde ausgeführt, also alle 10 Minuten:

*/10 * * * * [cron job command]

Führen Sie alle halbe Stunde ein Skript aus und leiten Sie die Ausgabe nach „/home/tuts/Documents“ um:

[email protected]
*/30 * * * * /path/to/homescript.sh > /home/username/Documents

Verwenden Sie den Operator &&, um jeden Freitag um 8:00 Uhr zwei Befehle auszuführen:

0 8 * * Fri commandA && commandB

Führen Sie einmal im Monat am fünften Tag des Monats um 2:00 Uhr einen Befehl aus:
(d. h. 5. März 2:00 Uhr, 5. April 2:00 Uhr, 5. Dezember 2:00 Uhr usw.):

0 2 5 * * [cron job command]

Führen Sie am 3. und 23. jeden Monats um 10:30 Uhr ein Skript aus:

30 10 3,23 * * /path/to/fosslinuxscript.sh

Verwenden Sie den folgenden Befehl, um benutzerdefinierte HOME-, PATH-, SHELL- und MAILTO-Variablen festzulegen und jede Minute einen Befehl auszuführen.

HOME=/opt
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/usr/bin/zsh
[email protected]
*/1 * * * * [cron job command]

Planungstipps

Die Aufgabe, Cron-Jobs zu planen, kann mit zunehmender Anzahl von Jobs herausfordernd und entmutigend sein. Cron-Jobs, die gleichzeitig ausgeführt werden, können insbesondere in Produktionsumgebungen zu ernsthaften Leistungsproblemen führen. Beispielsweise verbrauchen Systemsicherungen und -kompilierungen, die gleichzeitig ausgeführt werden, viele Systemressourcen, und Ihrem System könnte der Arbeitsspeicher ausgehen. Eine Möglichkeit, eine solche Herausforderung zu umgehen, besteht darin, ressourcenintensive Aufgaben zu unterschiedlichen Tages-, Wochen- oder Monatszeiten zu planen. Sie können Ihrem System auch mehr Arbeitsspeicher hinzufügen oder schlecht geschriebene Aufgaben entfernen, die viel Arbeitsspeicher beanspruchen.

Eine weitere Herausforderung entsteht, wenn Ihr Computer während eines Zeitraums ausgeschaltet ist, in dem ein Cron-Job ausgeführt werden soll. Infolgedessen wird der Cron-Job erst ausgeführt, wenn er das nächste Mal ausgeführt werden soll. Dies kann zu Problemen führen, insbesondere wenn der Cron-Job für Ihr System von entscheidender Bedeutung ist. Glücklicherweise stellt Linux das Programm Anacron zur Verfügung, das Benutzern die Möglichkeit gibt, Cron-Jobs in regelmäßigen Abständen zu planen. Erfahren Sie mehr auf den Manpages von Anacron.

Cron-Zugriff einschränken

Cron bietet eine Möglichkeit zu steuern, welche regulären Systembenutzer Zugriff auf den Befehl crontab haben. Es trägt wesentlich zur Begrenzung von Fehlern bei, die dazu führen können, dass Systemressourcen wie Speicher überschwemmt werden. Um möglichen Missbrauch zu verhindern, verwenden Sie die Dateien /etc/cron.deny und /etc/cron.allow, um den Benutzerzugriff zu kontrollieren. Sie können jeder Datei einen Benutzernamen hinzufügen, um den Zugriff zu verweigern oder zuzulassen.

Es ist wichtig, den Zugriff auf Cron-Jobs und den Befehl crontab durch Nicht-Root-Benutzer einzuschränken.

Schlussfolgerung

Cron ist ein Tool hauptsächlich für Systemadministratoren, aber auch für viele Benutzeraufgaben relevant. Zum Beispiel verwende ich cron, um langweilige Aufgaben wie Backups und in Webanwendungen zu planen.

Ich finde die Manpages von cron, crontab und anacron hilfreich und reich an Informationen und Tipps.


Linux
  1. Planen von Aufgaben mit dem Linux-Cron-Befehl

  2. Linux-Tipps zur Verwendung von Cron zum Planen von Aufgaben

  3. Überwachen Sie Ihr Linux-System in Ihrem Terminal mit procps-ng

  4. Verbessern Sie die Linux-Systemleistung mit noatime

  5. Systemaufrufe unter Linux mit strace verstehen

Was ist Crontab und wie werden Aufgaben in Linux mit Crontab automatisiert?

Finden Sie Informationen zur Linux-Systemhardware mit Hwinfo

So zeigen Sie Linux-Systemstatistiken mit Saidar an

So automatisieren Sie Aufgaben mit Cron-Jobs in Linux

Terminplanung mit cron &At

Crontab in Linux mit Beispielen verstehen