Linux / Wie man Crontab verwendet
Unter Linux können Sie mit crontab Befehle oder Skripte wiederholt zu bestimmten Zeiten ausführen. Mit crontab -e können Sie die geplanten Aufgaben des aktuellen Benutzers bearbeiten, wobei Sie fünf Zeitfelder und den auszuführenden Befehl in einer einzigen Zeile eingeben.
Unterschied zwischen cron und crontab
cron ist ein Dienst, der regelmäßig geplante Aufgaben überprüft und ausführt. crontab ist eine Liste von Aufgaben, in der Ausführungszeiten und Befehle festgehalten werden, die in der Regel für jeden Benutzer separat verwaltet wird. Die Beispiele in diesem Artikel basieren auf dem typischen Benutzer-crontab der Debian- und Ubuntu-Serien. Installationsmethoden, Dienstnamen und unterstützte Funktionen können je nach Distribution und cron-Implementierung unterschiedlich sein.
Geplante Aufgaben werden mit den Rechten des Besitzers der jeweiligen crontab ausgeführt. Wenn Rechte erforderlich sind, die der aktuelle Benutzer nicht besitzt, wählen Sie das Ausführungskonto sorgfältig und vergeben Sie keine unnötig weitreichenden Rechte. Aufgaben, die für eine Zeit geplant sind, in der der Computer ausgeschaltet ist oder der cron-Dienst gestoppt ist, werden nicht ausgeführt.
Überprüfung und Bearbeitung des Crontab
Verwenden Sie im Terminal den folgenden Befehl, um die geplanten Aufgaben des aktuellen Benutzers zu überprüfen. Wenn eine Meldung erscheint, dass keine Liste vorhanden ist, bedeutet dies, dass dieser Benutzer noch keinen Crontab hat.
crontab -l
Um Aufgaben hinzuzufügen oder zu ändern, führen Sie den folgenden Befehl aus. Der Auswahldialog für den Editor kann beim ersten Mal erscheinen, wenn Sie den Befehl ausführen. Nach dem Speichern der Datei und dem Verlassen des Editors prüft cron die Syntax und installiert die neue Liste. Wenn ein Fehler angezeigt wird, bearbeiten Sie ihn erneut gemäß den Anweisungen und bestätigen Sie, dass die Installationsmeldung angezeigt wird.
crontab -e
Geplante Aufgaben für das Administratorkonto sind getrennt von denen des aktuellen Benutzers. Bearbeiten Sie die Liste des Root-Benutzers nur mit sudo crontab -e und prüfen Sie sie mit sudo crontab -l, wenn administrative Rechte erforderlich sind. Verwechseln Sie die beiden Listen nicht.
Um eine einzelne Aufgabe zu entfernen, löschen Sie nur diese Zeile mit crontab -e und speichern Sie sie. crontab -r löscht die gesamte Liste der geplanten Aufgaben des aktuellen Benutzers, überprüfen Sie daher die Liste, bevor Sie sie verwenden, und sichern Sie sie bei Bedarf an einem sicheren Ort. Sie können sie mit crontab -l > ~/crontab-backup.txt sichern, und falls eine Wiederherstellung erforderlich ist, installieren Sie die gesamte Datei mit crontab ~/crontab-backup.txt neu. Die Wiederherstellung überschreibt die aktuelle Liste, prüfen Sie daher zuerst auf Änderungen.
Format der geplanten Zeit
Jeder Auftrag in einer Benutzer-Crontab besteht aus fünf Zeitfeldern, gefolgt vom Befehl. In System-Crontab-Dateien wie /etc/crontab oder /etc/cron.d/ wird zwischen den Zeitfeldern und dem Befehl ein zusätzliches Ausführungsbenutzerfeld hinzugefügt, daher sollte das unten angezeigte Format nicht direkt kopiert werden.
minute hour day-of-month month day-of-week command
| Feld | Zulässiger Bereich | Bedeutung |
|---|---|---|
| Minute | 0–59 | Minute |
| Stunde | 0–23 | Stunde |
| Tag des Monats | 1–31 | Datum |
| Monat | 1–12 | Monat |
| Wochentag | 0–7 | Wochentag. 0 und 7 sind Sonntag |
* bezieht sich auf alle Werte im Feld. Ein Komma gibt mehrere Werte an (10,20), ein Bindestrich gibt einen Bereich an (1-5), und ein Schrägstrich gibt Intervalle innerhalb eines Bereichs an (*/10). Zum Beispiel bedeutet */10 im Minutenfeld 0, 10, 20, 30, 40, 50 Minuten jede Stunde. Intervalle werden innerhalb jedes Feldes interpretiert, daher garantieren sie nicht immer den gleichen Abstand basierend auf der verstrichenen Zeit.
Wenn sowohl das Datum als auch der Wochentag eingeschränkt sind, wird ein Debian-Cron an einem Tag ausgeführt, der eine der beiden Bedingungen erfüllt. Zum Beispiel wird 0 4 1 * 1 jeden 1. Tag des Monats und jeden Montag um 4 Uhr morgens ausgeführt, nicht nur, wenn der 1. auf einen Montag fällt. Sie können detaillierte Formate in der Systemdokumentation man 5 crontab oder des Debian-Cron-Crontab-Formats nachsehen.
Beispiele für geplante Aufgaben
Ersetzen Sie /home/user/bin/backup.sh im folgenden Beispiel durch den absoluten Pfad des tatsächlichen Skripts. Der Benutzer muss Zugriff auf das Skript und die Ziel-Dateien haben, und wenn das Skript direkt ausgeführt wird, sind auch Ausführungsberechtigungen und die richtige Interpreter-Spezifikation erforderlich. Führen Sie es zuerst im Terminal mit demselben Konto aus, um die Ergebnisse zu überprüfen.
0 4 * * * /home/user/bin/backup.sh
0 4 * * 1-5 /home/user/bin/backup.sh
*/10 4 * * * /home/user/bin/backup.sh
Die erste Zeile läuft täglich um 4 Uhr morgens, die zweite Zeile läuft Montag bis Freitag um 4 Uhr morgens, und die dritte Zeile läuft alle 10 Minuten von 4:00 bis 4:50 Uhr. Die Beispiele sind unabhängige Zeitpläne. Wenn alle eingegeben werden, werden alle Aufgaben jeder Zeile registriert.
Registrieren und einen Job sicher testen
Beim Üben sollte anstelle eines tatsächlichen Backups ein Task verwendet werden, der eine Aufzeichnung im Home-Verzeichnis des aktuellen Benutzers hinterlässt.
- Führen Sie
crontab -eaus, fügen Sie die folgende einzelne Zeile hinzu, und speichern und schließen Sie dann. Das Datum und die Uhrzeit werden jede Minute an die Datei angehängt.
* * * * * /bin/date >> "$HOME/cron-test.log" 2>&1
- Führen Sie
crontab -laus, um den installierten Eintrag zu überprüfen. Nach 1–2 Minuten führen Siecat ~/cron-test.logaus und überprüfen, ob ein Eintrag hinzugefügt wurde. - Sobald bestätigt, löschen Sie nur den Übungseintrag mit
crontab -eund speichern Sie. Sie können die Protokolldatei nach Überprüfung ihres Inhalts löschen.
Wenn die Übung nicht funktioniert, prüfen Sie, ob der Cron-Dienst installiert und ausgeführt wird. In einem typischen Ubuntu-Cron-Paket können Sie den Status mit systemctl status cron einsehen. Der Dienstname und der Speicherort der Protokolle variieren je nach Distribution, und in einer Ubuntu-Umgebung, die das systemd-Journal verwendet, können Sie die Servicelogdateien mit journalctl -u cron prüfen.
Punkte, die zu überprüfen sind, wenn es nicht läuft
Cron kann in einer anderen Umgebung laufen als die Login-Shell. Geben Sie Befehle und Skripte möglichst mit absoluten Pfaden an und definieren Sie die erforderlichen Umgebungsvariablen und Arbeitsverzeichnisse klar im Skript. Um Fehler zu überprüfen, können Sie die Ausgabe und Fehler des Jobs auch in eine Logdatei umleiten, auf die der Benutzer Zugriff hat. Da Logs sensible Informationen enthalten können, achten Sie auf Zugriffsrechte und Aufbewahrungsfristen.
Überprüfen Sie, ob die Systemzeit und die Zeitzone wie erwartet sind, ob das Ausführungskonto auf die Dateien zugreifen kann und ob die Möglichkeit von überlappenden Ausführungen besteht. Das %, das in Befehlen verwendet wird, wird von cron speziell behandelt, daher muss es, um es wörtlich zu übergeben, normalerweise mit \% maskiert werden. Überprüfen Sie die Dokumentation des verwendeten cron auf das genaue Verhalten.




