Lassen Sie uns Crontab, seine Befehle und verschiedene Vorgänge im Zusammenhang mit Crontab kennenlernen.
Wir werden lernen, wie man mit dem Dienstprogramm cron Aufgaben plant, und schließlich werden wir auch einige der Online-Tools besprechen, die uns bei der Formatierung und dem Testen der cron-Befehle helfen.
Herkunft
Crontab steht für“Cron-Tabelle“. Das Wort cron stammt von dem griechischen Wort Chronos , das Zeit bedeutet. Crontab ist ein System-Daemon-Prozess, der automatisch einige Aufgaben und Jobs zu einer bestimmten Zeit ausführt.
Anwendungsfälle
Crontab ist nützlich, um verschiedene Vorgänge auszuführen, wie z.B. automatische Backups, Rotation von Protokolldateien, Synchronisierung von Dateien zwischen entfernten Rechnern und Löschen von temporären Ordnern, usw. Crontab kann für jede Art von Arbeit verwendet werden, aber besonders nützlich wird es, wenn es um die Systemadministration geht.
Mit cron kann ein Administrator einen Job für eine bestimmte Uhrzeit und einen bestimmten Tag planen.
Sehen wir uns also an, wie wir dies einrichten können.
Crontab-Syntax
Um eine Liste von Befehlen auszuführen, liest das Dienstprogramm cron die Konfigurationsdateien. Um die Zeilen in den Crontab-Konfigurationstabellen zu interpretieren, folgt es einer Crontab-Syntax. Crontab hat sechs Felder, wobei die ersten fünf (1-5) Felder das Datum und die Uhrzeit der Ausführung festlegen. Das letzte Feld, d.h. das 6. Feld, könnte ein Benutzername und/oder eine auszuführende Aufgabe /Job/Befehl/Skript sein.
* * * * * USER_NAME COMMAND/SCRIPT-TO-EXECUTE
│ │ │ │ │
│ │ │ │ │
│ │ │ │ |_ ________ Wochentag (0 – 6) (0 ist Sonntag, oder Namen verwenden)
│ │ │ │ |____________ Monat (1 – 12),* bedeutet jeden Monat
│ │ |______________ Tag des Monats (1 – 31),* bedeutet jeden Tag
│ |________________ Stunde (0 – 23),* bedeutet jede Stunde
|___________________ Minute (0 – 59), * bedeutet jede Minute
Anmerkungen:
- Ein Sternchen (*) wird verwendet, um alle möglichen Werte für ein Feld zu finden. Ein Sternchen im Feld Stunde bedeutet zum Beispiel jede Stunde oder ein Sternchen im Feld Monat bedeutet jeden Monat.
- username ist optional (nur verfügbar, wenn es sich um die System-Crontab-Datei handelt)
Beispiele:
Lassen Sie uns die obige Syntax anhand einiger Beispiele verstehen
1. Planen Sie einen Cron, der täglich um 5 Uhr morgens ausgeführt wird
0 5 * * * /scripts/job.sh
2. Planen Sie einen Cron, der zweimal täglich um 6 Uhr morgens und 18 Uhr abends ausgeführt wird
0 6,18 * * * /scripts/job.sh
3. Einen Cron für die Ausführung zu jeder Minute einplanen
* * * * * /scripts/job.sh
4. Planen Sie einen Cron, der jeden Montag um 19 Uhr ausgeführt wird.
0 19 * * * mon /scripts/job.sh
5. Planen Sie einen Cron, der alle 15 Minuten ausgeführt wird.
*/10 * * * * /scripts/job.sh
6. Planen Sie einen Cron, der in ausgewählten Monaten ausgeführt wird
* * * feb,jun,oct * /script/job.sh
7. Führen Sie das Shell-Skript /home/script/backup.sh
am 4. März um 7:25 Uhr aus
25 7 4 3 * /home/script/backup.sh
8. Planen Sie einen Cron, der alle 30 Sekunden ausgeführt wird
Da wir keine Kontrolle über die Sekunden in der Crontab haben, können wir dies mit dem folgenden zweistufigen Verfahren erreichen.
- Lassen Sie uns zunächst eine Aufgabe planen, die jede Minute ausgeführt wird.
* * * * * /home/scripts/script.sh
- Nun verwenden wir den Befehl
sleep
, um die Ausführung für 30 Sekunden zu unterbrechen.
* * * * * sleep 30; /home/scripts/script.sh
Die obige Aufgabe hält die Ausführung für 30 Sekunden an und setzt sie dann wieder fort.
Typ der Cron-Konfigurationsdateien
Es gibt zwei Arten von Cron-Konfigurationsdateien:
Das UNIX/Linux-System Crontab
Hierfür sind Root-Rechte erforderlich, da sie normalerweise für Systemdienste und kritische Aufträge verwendet wird. Das sechste Feld (in der obigen Syntaxbeschreibung) ist der Name eines Benutzers, unter dem der Befehl ausgeführt werden soll. Es gibt System Crontab die Möglichkeit, Befehle unter einem beliebigen Benutzer auszuführen.
Der Benutzer Crontab
Benutzer können mit dem Befehl crontab auch ihre eigenen Cron-Jobs installieren. Auch hier ist das sechste Feld (in der obigen Syntaxbeschreibung) der auszuführende Befehl, und alle Befehle werden als der Benutzer ausgeführt, der die crontab erstellt hat.
Jeder Benutzer kann seine eigene crontab-Datei haben. Obwohl sich diese Dateien in /var/spool/cron/crontabs
befinden, sind sie nicht dafür gedacht, direkt bearbeitet zu werden. Wir müssen den Befehl crontab verwenden, um unsere eigenen Cron-Jobs zu bearbeiten oder einzurichten.
Wie funktioniert das?
Der cron-Dienst (Daemon) läuft im Hintergrund und überprüft ständig (jede Minute) die Datei /etc/crontab
und die Verzeichnisse /etc/cron.*/
. Er überprüft auch das Verzeichnis /var/spool/cron/
.
Befehle werden von cron ausgeführt, wenn die Felder Minute, Stunde und Monat mit der aktuellen Uhrzeit übereinstimmen und mindestens eines der beiden Tagesfelder (Tag des Monats oder Tag der Woche) mit dem aktuellen Tag übereinstimmt.
Grundlegende Befehle
Vorhandene Cron-Jobs auflisten
Mit dem folgenden Befehl können wir alle Cron-Jobs auflisten, ohne die Konfigurationsdatei crontab zu öffnen
crontab -l
Wenn kein Job vorhanden ist, wird die folgende Ausgabe angezeigt
[geekflare@localhost ~]# crontab -l
keine crontab für geekflare
[geekflare@localhost ~]#
Wenn der Benutzer bereits einige der Jobs hinzugefügt hat, wird die Ausgabe wie folgt aussehen.
[geekflare@localhost ~]# crontab -l
# Bearbeiten Sie diese Datei, um Aufgaben einzuführen, die von cron ausgeführt werden sollen.
#
# Jede Aufgabe, die ausgeführt werden soll, muss in einer einzigen Zeile definiert werden
# die mit verschiedenen Feldern angibt, wann die Aufgabe ausgeführt werden soll
# und welcher Befehl für die Aufgabe ausgeführt werden soll
#
# Um die Zeit zu definieren, können Sie konkrete Werte angeben für
# Minute (m), Stunde (h), Tag des Monats (dom), Monat (mon),
# und Wochentag (dow) angeben oder '*' in diesen Feldern verwenden (für 'any'). #
# Beachten Sie, dass die Aufgaben auf der Grundlage des Cron-Systems gestartet werden
# Daemon's Vorstellung von Zeit und Zeitzonen.
#
# Die Ausgabe der crontab-Jobs (einschließlich Fehler) wird per
# E-Mail an den Benutzer gesendet, dem die crontab-Datei gehört (sofern nicht umgeleitet).
#
sie können zum Beispiel ein Backup aller Ihrer Benutzerkonten # durchführen
# jede Woche um 5 Uhr morgens mit:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# Weitere Informationen finden Sie in den Handbuchseiten von crontab(5) und cron(8)
#
# m h dom mon dow Befehl
0 */1 * * * /home/account/scripts/updateAccountStatuses.sh
0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh
[geekflare@localhost ~]#
Die Cron-Tabelle ist benutzerspezifisch, d.h. Sie müssen mit einem bestimmten Benutzer angemeldet sein, um die Liste der Cron-Tabellen zu sehen.
Cron für einen bestimmten Benutzer auflisten
Um geplante Aufträge eines anderen Benutzers aufzulisten, verwenden Sie die Optionen -u(Benutzer) und -l(Liste).
crontab -u anderer_Benutzername -l
Beispiel: crontab -u geekflare -l
Hinzufügen/Ändern von Crontab-Einträgen
Um den Crontab-Eintrag zu bearbeiten, können wir die Option -e
wie unten gezeigt verwenden.
crontab -e
Der obige Befehl öffnet den vi-Editor, in dem Sie die Details des Jobs angeben und die Datei speichern. Sobald die Datei gespeichert ist, können Sie mit crontab -l
überprüfen, ob cron konfiguriert ist oder nicht.
Hinzufügen/Ändern von Crontab-Einträgen für einen bestimmten Benutzer
Wir können die Crontab für einen anderen Benutzer mit dem folgenden Befehl bearbeiten
crontab -u anderer_Benutzername -e
Beispiel: crontab -u geekflare -e
Crontab Eintrag entfernen
Verwenden Sie den Parameter <strong>-r</strong>
mit Crontab, um komplette geplante Aufträge ohne Bestätigung aus der Crontab zu entfernen
crontab -r
Wenn Sie vor dem Löschen von geplanten Aufträgen eine Bestätigung wünschen, verwenden Sie die Option <strong>-i</strong>
mit -r
, die den Benutzer vor dem Löschen der Crontab des Benutzers zur Bestätigung auffordert.
crontab -i -r
[geekflare@localhost ~]# crontab -i -r
crontab: geekflare's crontab wirklich löschen?
Crontab Sonderzeichenfolge
Neben der oben beschriebenen Syntax können wir auch acht spezielle Zeichenketten verwenden, die von Crontab bereitgestellt werden. Damit sparen wir nicht nur Zeit, sondern verbessern auch die Lesbarkeit.
Besondere Zeichenfolge | Beschreibung |
@neustart | Einmalig ausführen, nach dem Start. |
@yearly | Wird einmal pro Jahr ausgeführt, d.h. 0 0 1 1 * |
@jährlich | Dasselbe wie @yearly |
@monatlich | Wird einmal im Monat ausgeführt, d.h. 0 0 1 * * |
@wöchentlich | Läuft einmal pro Woche, d.h. 0 0 * * 0 |
@täglich | Läuft einmal am Tag, d.h. 0 0 * * * |
@Mitternacht | Gleich wie @daily |
@stündlich | Wird einmal pro Stunde ausgeführt, d.h. 0 * * * * |
Beispiele für spezielle Crontab-Zeichenfolgen
1. Crontab zur Planung von Aufgaben auf jährlicher Basis
@jährlich /scripts/greeting.sh
Wir können die obige Datei ausführen, um einen Neujahrsgruß zu versenden. Sie wird in der ersten Minute eines jeden Jahres ausgeführt.
2. Crontab zur Planung von Aufgaben, die monatlich ausgeführt werden.
@monatlich /scripts/cleanup.sh
Wir können die obige Crontab ausführen, um einige Aufräumarbeiten am Anfang eines jeden Monats durchzuführen.
In ähnlicher Weise können wir andere spezielle Crontab-Zeichenketten für wöchentliche, tägliche und stündliche Aufgaben verwenden.
Cron-Verzeichnis
Der Systemadministrator kann einen systemweiten Cron-Zeitplan verwenden, der sich im vordefinierten Cron-Verzeichnis befindet, wie unten gezeigt
- /etc/cron.d
- /etc/cron.daily
- /etc/cron.hourly
- /etc/cron.monatlich
- /etc/cron.weekly
Crontab Beispiele in Echtzeit
Lassen Sie uns einige der Echtzeit-Beispiele besprechen, die ein Systemadministrator oder IT-Profis normalerweise verwenden.
Leere Dateien und Verzeichnisse löschen
45 0 * * * geekflare find /tmp -type f -empty -delete
Der obige Cron-Ausdruck findet die leeren Dateien und Verzeichnisse im Verzeichnis /tmp und löscht sie. Dieser Job wird täglich um 12.45 Uhr ausgeführt. Wir müssen den Benutzernamen angeben, der diesen Job ausführen soll. Im obigen Beispiel führt der Benutzer geekflare den Cron-Job aus.
Ausführen mehrerer Aufgaben mit einem einzigen Cron-Job
* * * * * /home/scripts/backup.sh; /home/scripts/scritp.sh
Mehrere Aufgaben/Jobs können mit einem Semikolon(;) getrennt und einem einzigen Cron-Ausdruck zugewiesen werden.
Cron-Formatierung & Test-Tools
Bisher haben wir die Befehle und die Syntax von crontab zur Planung einer Aufgabe besprochen. Aber was ist, wenn Sie kein Systemadministrator sind und Ihre Aufgabe nicht darin besteht, Cron regelmäßig einzurichten? Dann kann es sein, dass Sie sich die Syntax nicht merken können, und das eröffnet Raum für Fehler. Aber keine Sorge, wir haben eine Lösung für dieses Problem.
Es gibt mehrere Cron-Formatierungstools, die online verfügbar sind.
# 1. Cron Job Generator
Cron Job Generator ist eine sehr benutzerfreundliche GUI, in der Sie die Minute, die Tage und den Pfad des Skripts angeben können, um eine Crontab zu erstellen.
Nehmen wir ein Echtzeit-Beispiel, bei dem ich /home/processMonitor.sh
alle 5 Minuten zwischen Montag und Freitag ausführen muss.
Ich habe also die folgende Cron-Syntax, die ich in meine Crontab einfügen kann, indem ich ausführe
crontab -e
0,5,10,15,20,25,30,35,40,45,50,55 * * * 1-5 /home/processMonitor.sh
# 2. Crontab Generator
Crontab Generator ist ein weiteres praktisches Tool zum Erstellen von Crontab. Mit diesem Tool können Sie auch angeben, ob Sie die Cron-Ausgabe in einer Datei speichern oder per E-Mail versenden möchten.
# 3. Crontab Guru
Crontab Guru ist ein einfacher Online-Editor für Cron-Zeitplanausdrücke. Darüber hinaus bietet er eine nützliche Funktion zur Überwachung Ihres Cronjobs. Alles, was wir tun müssen, ist, einen bereitgestellten Befehl zu kopieren und an das Ende der Crontab-Definition anzuhängen. Falls der Cronjob fehlschlägt oder gar nicht erst startet, erhalten Sie eine Warnmeldung per E-Mail.
Im folgenden Beispiel wird der Job um 04:05 Uhr ausgeführt, jeden Tag, jeden Monat und jede Woche.
Fazit
Ich hoffe, die obigen Ausführungen helfen Ihnen, Crontab und die Einrichtung von Cron-Jobs besser zu verstehen. Das Planen von Aufträgen über Cron ist eine der vielen Aufgaben eines Linux-Administrators.