Eine detaillierte Untersuchung von Crontab: Befehle, Operationen und Anwendungen
In diesem Artikel widmen wir uns dem Thema Crontab, einschließlich seiner Befehle und der vielfältigen Operationen, die damit verbunden sind. Wir werden uns ansehen, wie man Aufgaben mithilfe des Cron-Dienstprogramms zeitlich plant und einige der Online-Tools erkunden, die uns bei der Erstellung und Überprüfung von Cron-Befehlen behilflich sind.
Die Ursprünge von Crontab
Der Begriff Crontab steht für „Cron-Tabelle“. Das Wort „Cron“ leitet sich vom griechischen Wort „Chronos“ ab, was Zeit bedeutet. Crontab ist ein System-Daemon-Prozess, der Aufgaben und Jobs zu einem vorgegebenen Zeitpunkt automatisch ausführt.
Anwendungsbereiche von Crontab
Crontab ist ein vielseitiges Werkzeug, das für die Ausführung verschiedener Operationen genutzt werden kann. Dazu gehören automatisierte Backups, die Rotation von Protokolldateien, die Synchronisation von Dateien zwischen entfernten Rechnern und das Löschen temporärer Ordner. Während Crontab für jede Art von Aufgabe verwendet werden kann, erweist es sich besonders wertvoll im Bereich der Systemadministration.
Mithilfe von Cron kann ein Administrator festlegen, dass ein Job zu einer bestimmten Zeit und an einem bestimmten Tag ausgeführt wird. Im Folgenden zeigen wir, wie dies eingerichtet werden kann.
Die Crontab-Syntax
Um eine Reihe von Befehlen auszuführen, greift das Cron-Dienstprogramm auf Konfigurationsdateien zurück. Die Zeilen in den Crontab-Konfigurationstabellen werden gemäß einer bestimmten Crontab-Syntax interpretiert. Eine Crontab-Zeile besteht aus sechs Feldern. Die ersten fünf Felder (1-5) definieren das Datum und die Uhrzeit der Ausführung. Das sechste Feld kann einen Benutzernamen und/oder eine Aufgabe/einen Job/einen Befehl/ein Skript enthalten.
* * * * * BENUTZERNAME BEFEHL/SKRIPT-ZUR-AUSFÜHRUNG
│ │ │ │ │
│ │ │ │ │
│ │ │ │ |_________ Wochentag (0 – 6) (0 ist Sonntag, oder Verwendung von Namen)
│ │ │ |____________ Monat (1 – 12),* bedeutet jeden Monat
│ │ |______________ Tag des Monats (1 – 31),* bedeutet jeden Tag
│ |________________ Stunde (0 – 23),* bedeutet stündlich
|_____ Minute (0 – 59), * bedeutet jede Minute
Hinweise:
- Ein Sternchen (*) wird verwendet, um alle möglichen Werte für ein bestimmtes Feld zu repräsentieren. Beispielsweise würde ein Sternchen im Stundenfeld jeder Stunde entsprechen, während ein Sternchen im Monatsfeld jeden Monat bedeuten würde.
Der Benutzername ist optional (nur bei der Crontab-Datei des Systems relevant)
Betrachten wir einige Beispiele, um die oben erläuterte Syntax zu verdeutlichen:
0 5 * * * /scripts/job.sh
1. Ein Cron-Job, der täglich um 5 Uhr morgens ausgeführt wird.
0 6,18 * * * /scripts/job.sh
2. Ein Cron-Job, der zweimal täglich um 6:00 Uhr und 18:00 Uhr ausgeführt wird.
* * * * * /scripts/job.sh
3. Ein Cron-Job, der jede Minute ausgeführt wird.
0 19 * * mon /scripts/job.sh
4. Ein Cron-Job, der jeden Montag um 19:00 Uhr ausgeführt wird.
*/10 * * * * /scripts/job.sh
5. Ein Cron-Job, der alle 10 Minuten ausgeführt wird.
* * * feb,jun,oct * /script/job.sh
6. Ein Cron-Job, der in bestimmten Monaten ausgeführt wird.
25 7 4 3 * /home/script/backup.sh
7. Die Ausführung des Shell-Skripts /home/script/backup.sh am 4. März um 7:25 Uhr.
8. Ein Cron-Job, der alle 30 Sekunden ausgeführt wird:
- Da Crontab keine direkte Steuerung über die Sekunden bietet, kann dies durch einen zweistufigen Ansatz erreicht werden:
* * * * * /home/scripts/script.sh
- Zunächst wird ein Job eingeplant, der jede Minute ausgeführt wird.
* * * * * sleep 30; /home/scripts/script.sh
Nun verwenden wir den Befehl sleep, um die Ausführung für 30 Sekunden zu pausieren.
Der obige Job hält die Ausführung für 30 Sekunden an und wird dann fortgesetzt.
Arten von Cron-Konfigurationsdateien
Es gibt zwei Haupttypen von Cron-Konfigurationsdateien:
Das UNIX/Linux-System Crontab
Dieses System erfordert Root-Rechte, da es üblicherweise für Systemdienste und kritische Aufgaben eingesetzt wird. Das sechste Feld (gemäß der obigen Syntaxbeschreibung) ist der Name des Benutzers, unter dem der Befehl ausgeführt werden soll. Dies ermöglicht der System-Crontab, Befehle als jeder Benutzer auszuführen.
Die Benutzer-Crontab
Jeder Benutzer kann seine eigenen Cron-Jobs mithilfe des Befehls crontab einrichten. In diesem Fall ist das sechste Feld (gemäß der obigen Syntaxbeschreibung) der auszuführende Befehl, und alle Befehle werden als der Benutzer ausgeführt, der die Crontab erstellt hat. Benutzer-Crontab-Dateien befinden sich im Verzeichnis /var/spool/cron/crontabs, sollten aber nicht direkt bearbeitet werden. Stattdessen wird der Befehl crontab zur Bearbeitung oder Einrichtung eigener Cron-Jobs verwendet.
Wie funktioniert es? Der Cron-Dienst (Daemon) läuft im Hintergrund und prüft kontinuierlich (jede Minute) die Datei /etc/crontab sowie die Verzeichnisse /etc/cron.*/. Es untersucht auch das Verzeichnis /var/spool/cron/. Befehle werden von Cron ausgeführt,
wenn die Felder für Minuten, Stunden und Monate mit der aktuellen Zeit übereinstimmen und mindestens eines der beiden Tagesfelder (Tag des Monats oder Wochentag) mit dem aktuellen Tag übereinstimmt.
Grundlegende Befehle
Vorhandene Cron-Jobs auflisten:
crontab -l
Alle Cron-Jobs können mit dem obigen Befehl angezeigt werden, ohne dass die Crontab-Konfigurationsdatei geöffnet werden muss.
[[email protected] ~]# crontab -l no crontab for wdzwdz [[email protected] ~]#
Wenn keine Jobs vorhanden sind, wird die Ausgabe wie oben angezeigt.
[[email protected] ~]# crontab -l # Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any').# # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command 0 */1 * * * /home/account/scripts/updateAccountStatuses.sh 0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh [[email protected] ~]#
Wenn der Benutzer bereits Jobs hinzugefügt hat, wird die Ausgabe wie oben dargestellt.
Die Cron-Tabelle ist benutzerspezifisch. Das bedeutet, dass Sie mit einem bestimmten Benutzer angemeldet sein müssen, um die Cron-Tabellenliste anzuzeigen.
Cron für einen bestimmten Benutzer auflisten:
Um die geplanten Jobs eines anderen Benutzers aufzulisten, verwenden Sie die Option -u (Benutzer) und -l (Liste).
crontab -u anderer_benutzername -l
Beispiel: crontab -u wdzwdz -l
Crontab-Einträge hinzufügen/ändern
Um einen Crontab-Eintrag zu bearbeiten, können wir die Option -e verwenden.
crontab -e
Der obige Befehl öffnet einen vi-Editor, in dem die Details des Jobs festgelegt und die Datei gespeichert werden können. Nach dem Speichern kann mit crontab -l überprüft werden, ob der Cron-Job konfiguriert wurde.
Crontab-Einträge für einen bestimmten Benutzer hinzufügen/ändern:
crontab -u anderer_benutzername -e
Die Crontab eines anderen Benutzers kann mit dem obigen Befehl bearbeitet werden.
Beispiel: crontab -u wdzwdz -e
Crontab-Einträge entfernen:
Verwenden Sie den Parameter -r mit Crontab, um alle geplanten Jobs ohne Bestätigung zu entfernen.
crontab -r
crontab -i -r
[[email protected] ~]# crontab -i -r crontab: really delete wdzwdz's crontab?
Um vor dem Löschen geplanter Jobs eine Bestätigung zu erhalten, verwenden Sie die Option -i mit -r. Diese fordert den Benutzer zur Bestätigung auf, bevor die Crontab des Benutzers gelöscht wird.
Spezielle Crontab-Strings
Neben der oben beschriebenen Syntax können wir auch acht spezielle Zeichenketten verwenden, die von Crontab bereitgestellt werden. Dies spart nicht nur Zeit, sondern verbessert auch die Übersichtlichkeit.
Spezielle Zeichenfolge
Beschreibung
@reboot
Einmal nach dem Start ausführen.
@jährlich
Einmal im Jahr ausführen, d. h. 0 0 1 1 *
@jährlich
Entspricht @yearly
@monatlich
Einmal im Monat ausführen, d. h. 0 0 1 * *
@wöchentlich
Einmal pro Woche ausführen, d. h. 0 0 * * 0
@täglich
Einmal täglich ausführen, d. h. 0 0 * * *
@Mitternacht
Entspricht @daily
@stündlich
Einmal pro Stunde ausführen, d.h. 0 * * * *
Crontab-Beispiele mit speziellen Zeichenketten:
1. Cron-Job, um Aufgaben jährlich zu planen:
@yearly /scripts/greeting.sh
Der obige Cron-Job wird einmal jährlich, in der ersten Minute des Jahres, ausgeführt und kann beispielsweise verwendet werden, um Neujahrsgrüße zu versenden.
2. Cron-Job, um Aufgaben monatlich zu planen:
@monthly /scripts/cleanup.sh
Der obige Job kann verwendet werden, um zu Beginn jedes Monats einige Aufräumarbeiten durchzuführen.
Ebenso können wir andere spezielle Crontab-Strings für wöchentliche, tägliche und stündliche Aufgaben verwenden.
Cron-Verzeichnis
- Systemadministratoren können systemweite Cron-Zeitpläne verwenden, die sich in den folgenden vordefinierten Cron-Verzeichnissen befinden:
- /etc/cron.d
- /etc/cron.daily
- /etc/cron.hourly
- /etc/cron.monthly
/etc/cron.weekly
Crontab-Beispiele aus der Praxis
Betrachten wir nun einige Beispiele aus der Praxis, die üblicherweise von Systemadministratoren oder IT-Experten verwendet werden.
Leere Dateien und Verzeichnisse löschen
45 0 * * * wdzwdz find /tmp -type f -empty -delete
Der obige Cron-Ausdruck findet leere Dateien und Verzeichnisse im Verzeichnis /tmp und löscht diese. Dieser Job wird täglich um 0:45 Uhr ausgeführt. Es ist wichtig, den Benutzernamen anzugeben, unter dem der Job ausgeführt wird. Im obigen Beispiel führt der Benutzer „wdzwdz“ den Cron-Job aus.
Mehrere Aufgaben mit einem einzigen Cron-Job ausführen
* * * * * /home/scripts/backup.sh; /home/scripts/scritp.sh
Mehrere Aufgaben/Jobs können durch ein Semikolon (;) getrennt und in einem einzigen Cron-Ausdruck zusammengefasst werden.
Cron-Formatierungs- und Testwerkzeuge
Bisher haben wir die Befehle und Syntax von Crontab besprochen, die für die Planung von Aufgaben erforderlich sind. Was aber, wenn Sie kein Systemadministrator sind und die regelmäßige Einrichtung von Cron-Jobs nicht zu Ihren Aufgaben gehört? In diesem Fall kann es schwierig sein, sich die Syntax zu merken, und dies kann Fehler begünstigen. Aber keine Sorge, es gibt Lösungen.
Es gibt zahlreiche Online-Tools für die Cron-Formatierung.
# 1. Cron-Job-Generator
Cron-Job-Generator
ist eine benutzerfreundliche grafische Oberfläche, in der Sie die Minute, die Tage und den Pfad des Skripts zur Erstellung von Crontab-Ausdrücken definieren können.
Nehmen wir ein Beispiel aus der Praxis: Ich muss /home/processMonitor.sh von Montag bis Freitag alle 5 Minuten ausführen.
Ich habe die folgende Cron-Syntax erhalten, die ich in meine Crontab einfügen kann:
crontab -e
0,5,10,15,20,25,30,35,40,45,50,55 * * * 1-5 /home/processMonitor.sh
# 2. Easycron Easycron
ist ein hilfreicher webbasierter Cron-Job-Scheduler. Ein Cron-Job kann durch Angabe einer aufzurufenden URL erstellt und die Ausführungszeit kann festgelegt werden. Es ist möglich, einen Cron-Ausdruck manuell zu definieren oder aus einem beschreibenden Formular hinzuzufügen. Zudem kann optional eine grundlegende HTTP-Authentifizierung für eine zusätzliche Sicherheitsebene verwendet werden.
Easycron bietet auch zusätzliche Funktionen wie standardmäßige Cron-Ausdrücke, Cron-Job-Ausführungsprotokolle, E-Mail-Benachrichtigungen, separate Fehlerprotokolle usw.
# 3. Crontab-Generator Crontab-Generator
ist ein weiteres nützliches Tool zur Generierung von Crontab-Ausdrücken. Mit diesem Tool kann auch festgelegt werden, ob die Cron-Ausgabe in einer Datei gespeichert oder per E-Mail versendet werden soll.
# 4. Crontab-Guru Crontab-Guru
ist ein übersichtlicher Online-Editor für Cron-Zeitpläne und bietet außerdem eine hilfreiche Überwachungsmöglichkeit für Cron-Jobs. Nach dem Kopieren des bereitgestellten Befehls und Einfügen an das Ende der Crontab-Definition werden Warn-E-Mails versendet, wenn der Cron-Job fehlschlägt oder gar nicht erst startet.
Im folgenden Beispiel wird der Job jeden Tag, jeden Monat und jede Woche um 4:05 Uhr ausgeführt.
# 5. CRON-Tester CRON-Tester
ermöglicht es, die Cron-Zeit-/Datum-Definitionen zu testen. Es kann vorkommen, dass vorhandene Cron-Syntax zur Fehlerbehebung interpretiert oder ein einfacher Test durchgeführt werden muss.
Dafür kann dieses Tool verwendet werden. Dazu müssen der Cron-Ausdruck in das Feld für die Cron-Definition kopiert, die Anzahl der Iterationen ausgewählt und auf „Test“ geklickt werden, um die verschiedenen Daten anzuzeigen, an denen er ausgeführt wird.