Einführung
Willkommen im Linux-Job-Scheduling-Labor (Linux 作业调度实验室). In dieser Sitzung werden Sie lernen, wie Sie wiederholende Aufgaben in Linux mit dem crontab-Tool automatisieren können. crontab ist ein zeitbasierter Job-Scheduler in Unix-ähnlichen Betriebssystemen.
Das Planen von Aufgaben ist eine grundlegende Fähigkeit für Systemadministratoren und Entwickler. Durch die Automatisierung von Routinetätigkeiten können Sie die Effizienz steigern, die Zuverlässigkeit gewährleisten und die manuelle Intervention reduzieren. Mit dem crontab-Tool können Sie Befehle so planen, dass sie in festgelegten Intervallen, von Minuten bis Monaten, ausgeführt werden.
Im Laufe dieses Labs werden Sie lernen, geplante Aufgaben mit crontab zu erstellen, zu verwalten und zu überwachen. Am Ende werden Sie in der Lage sein, automatisierte Aufgabenplanung in Ihrer eigenen Linux-Umgebung umzusetzen.
Grundlegendes zur Crontab und Erstellung Ihrer ersten geplanten Aufgabe
Crontab (Cron-Tabelle) ist ein Tool in Linux, das es Benutzern ermöglicht, Aufgaben zu planen, die zu bestimmten Zeiten automatisch ausgeführt werden. Diese geplanten Aufgaben werden "Cron-Jobs" genannt.
Crontab-Syntax
Die grundlegende Syntax eines Cron-Jobs folgt diesem Format:
* * * * * command_to_execute
Jedes Sternchen steht für eine andere Zeiteinheit:
- Minute (0-59)
- Stunde (0-23)
- Tag des Monats (1-31)
- Monat (1-12)
- Wochentag (0-6, wobei 0 Sonntag ist)
Beispielsweise würden Sie folgenden Eintrag verwenden, um einen Befehl jeden Tag um 14:30 Uhr auszuführen:
30 14 * * * command_to_execute
Erstellung Ihres ersten Cron-Jobs
Erstellen wir nun einen einfachen Cron-Job, der die aktuelle Datum und Uhrzeit jede Minute aufzeichnet. Dies wird Ihnen helfen, zu verstehen, wie Cron-Jobs funktionieren.
Stellen Sie zunächst sicher, dass Sie sich im richtigen Verzeichnis befinden:
cd ~/project
Erstellen wir nun eine leere Protokolldatei, in die unser Cron-Job das Datum und die Uhrzeit schreiben wird:
touch ~/project/date_log.txt
Öffnen Sie als Nächstes den Crontab-Editor mit folgendem Befehl:
crontab -e
Wenn Sie Crontab zum ersten Mal verwenden, werden Sie möglicherweise aufgefordert, einen Editor auszuwählen. Wählen Sie Ihre bevorzugte Option (für Anfänger wird nano empfohlen).
Fügen Sie im Editor am Ende der Datei die folgende Zeile hinzu:
* * * * * date >> ~/project/date_log.txt
Speichern Sie die Datei und verlassen Sie den Editor:
- Wenn Sie nano verwenden, drücken Sie
Ctrl+O, um zu speichern, dannEnter, um zu bestätigen, und schließlichCtrl+X, um zu verlassen. - Wenn Sie vim verwenden, drücken Sie
Esc, geben Sie dann:wqein und drücken SieEnter.
Dieser Cron-Job fügt die aktuelle Datum und Uhrzeit jede Minute zur Datei date_log.txt hinzu. Warten Sie mindestens eine Minute und überprüfen Sie dann, ob Ihr Cron-Job funktioniert:
cat ~/project/date_log.txt
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
Tue Feb 15 14:32:01 UTC 2023
Wenn Sie länger warten und den Befehl erneut ausführen, sollten Sie mehrere Einträge mit Zeitstempeln in Abständen von etwa einer Minute sehen, was bestätigt, dass Ihr Cron-Job korrekt ausgeführt wird.
Verwalten und Ändern von Cron-Jobs
Nachdem Sie Ihren ersten Cron-Job erstellt haben, lernen wir nun, wie Sie Ihre geplanten Aufgaben anzeigen, ändern und verwalten können.
Anzeigen aktueller Cron-Jobs
Um Ihre aktuellen Cron-Jobs anzuzeigen, verwenden Sie folgenden Befehl:
crontab -l
Dieser Befehl zeigt alle Cron-Jobs an, die derzeit für Ihren Benutzer geplant sind. Sie sollten den Job sehen, den Sie im vorherigen Schritt erstellt haben:
* * * * * date >> ~/project/date_log.txt
Grundlagen zu Cron-Job-Planungsmustern
Bevor wir unseren Job ändern, schauen wir uns einige gängige Planungsmuster an:
* * * * *- Jede Minute ausführen*/5 * * * *- Alle 5 Minuten ausführen0 * * * *- Am Anfang jeder Stunde ausführen0 0 * * *- Jeden Tag um Mitternacht ausführen0 0 * * 0- Jeden Sonntag um Mitternacht ausführen
Ändern eines Cron-Jobs
Ändern wir den bestehenden Cron-Job so, dass er alle 5 Minuten anstatt jeder Minute ausgeführt wird. Dazu öffnen Sie den Crontab-Editor:
crontab -e
Suchen Sie die Zeile, die Sie im vorherigen Schritt hinzugefügt haben:
* * * * * date >> ~/project/date_log.txt
Ändern Sie sie in:
*/5 * * * * date >> ~/project/date_log.txt
Das */5 in der ersten Position bedeutet "alle 5 Minuten". Speichern Sie die Datei und verlassen Sie den Editor wie zuvor (Ctrl+O, Enter, Ctrl+X für nano).
Um die Änderungen zu überprüfen, zeigen Sie Ihre Crontab erneut an:
crontab -l
Sie sollten den aktualisierten Cron-Job sehen. Die Ausgabe sollte wie folgt aussehen:
*/5 * * * * date >> ~/project/date_log.txt
Wenn Sie nach 5 Minuten erneut in Ihre Protokolldatei schauen:
cat ~/project/date_log.txt
Sollten Sie bemerken, dass nun alle 5 Minuten anstatt jeder Minute neue Einträge hinzugefügt werden.
Vorteile der Änderung der Job-Frequenz
Das Ausführen von Jobs in angemessenen Intervallen hilft, die Systemressourcen zu optimieren. Sehr häufige Jobs (z.B. jede Minute) können eine unnötige Systemlast verursachen, während weniger häufige Zeitpläne (z.B. alle 5 Minuten) oft ein besseres Gleichgewicht zwischen Aktualität und Effizienz für Überwachungsaufgaben bieten.
Erstellung fortgeschrittenerer Cron-Jobs
Nachdem Sie die Grundlagen verstanden haben, erstellen wir nun einen fortgeschritteneren Cron-Job, der Systeminformationen protokolliert.
Erstellung eines Jobs zur Protokollierung von Systeminformationen
Erstellen wir einen Cron-Job, der die Informationen über die Speicherauslastung des Systems stündlich protokolliert. Diese Art der Überwachung kann nützlich sein, um die Systemleistung im Laufe der Zeit zu verfolgen.
Zunächst erstellen wir ein Shell-Skript, das die Speicherinformationen sammelt:
nano ~/project/memory_check.sh
Fügen Sie im nano-Editor folgenden Inhalt hinzu:
#!/bin/bash
echo "Memory check at $(date)" >> ~/project/memory_log.txt
free -m >> ~/project/memory_log.txt
echo "--------------------" >> ~/project/memory_log.txt
Dieses Skript wird:
- Einen Zeitstempel in das Protokoll einfügen
- Den Befehl
free -mausführen, um die Speicherauslastung in Megabyte anzuzeigen - Eine Trennlinie für bessere Lesbarkeit hinzufügen
Speichern Sie die Datei und verlassen Sie den Editor (drücken Sie Ctrl+O, Enter, dann Ctrl+X).
Machen Sie nun das Skript ausführbar:
chmod +x ~/project/memory_check.sh
Sie können das Skript testen, um sicherzustellen, dass es korrekt funktioniert:
~/project/memory_check.sh
Überprüfen Sie die Ausgabedatei:
cat ~/project/memory_log.txt
Sie sollten eine Ausgabe sehen, die den Zeitstempel, die Speicherauslastungsinformationen und eine Trennlinie enthält.
Planen wir nun, dass dieses Skript stündlich mit Crontab ausgeführt wird:
crontab -e
Fügen Sie die folgende Zeile hinzu (behalten Sie dabei Ihren bestehenden Cron-Job):
0 * * * * ~/project/memory_check.sh
Dies führt das Skript zur Speicherüberprüfung am Anfang jeder Stunde aus. Speichern Sie die Datei und verlassen Sie den Editor.
Um zu überprüfen, ob der neue Cron-Job hinzugefügt wurde:
crontab -l
Sie sollten beide Cron-Jobs sehen:
*/5 * * * * date >> ~/project/date_log.txt
0 * * * * ~/project/memory_check.sh
Verwendung spezieller Zeitangaben
Cron unterstützt auch einige spezielle Zeitangaben für häufige Planungsmuster:
@hourly- Entspricht0 * * * *@daily- Entspricht0 0 * * *@weekly- Entspricht0 0 * * 0@monthly- Entspricht0 0 1 * *@reboot- Wird beim Systemstart ausgeführt
Fügen wir einen Job hinzu, der täglich mit diesen speziellen Zeitangaben ausgeführt wird:
crontab -e
Fügen Sie die folgende Zeile hinzu:
@daily echo "Daily check on $(date)" >> ~/project/daily_check.txt
Speichern Sie die Datei und verlassen Sie den Editor. Dies erstellt einmal pro Tag um Mitternacht einen neuen Eintrag in der Datei daily_check.txt.
Um zu überprüfen, ob der neue Cron-Job hinzugefügt wurde:
crontab -l
Sie sollten nun alle drei Cron-Jobs sehen:
*/5 * * * * date >> ~/project/date_log.txt
0 * * * * ~/project/memory_check.sh
@daily echo "Daily check on $(date)" >> ~/project/daily_check.txt
Verwaltung der Cron-Job-Ausgabe
Standardmäßig sendet Cron alle Ausgaben von Jobs an die E-Mail des Benutzers. Wenn Sie die Ausgabe vollständig verwerfen möchten, können Sie sie auf /dev/null umleiten:
*/10 * * * * ~/project/some_script.sh > /dev/null 2>&1
Dies ist eine gängige Praxis für Skripte, deren Ausgabe Sie nicht behalten müssen.
Zusammenfassung
Herzlichen Glückwunsch, dass Sie das Linux-Job-Planungs-Lab abgeschlossen haben. Sie haben nun gelernt, wie Sie das crontab-Werkzeug verwenden können, um Aufgaben in Linux zu automatisieren.
Im Laufe dieses Labs haben Sie Folgendes erreicht:
- Erstellt einen einfachen Cron-Job, um Datum und Uhrzeit in regelmäßigen Abständen zu protokollieren
- Die Crontab-Syntax und die Bedeutung der Zeitfelder (Minute, Stunde, Tag, Monat, Wochentag) gelernt
- Bestehende Cron-Jobs geändert, um ihre Ausführungsfrequenz zu verändern
- Ein Shell-Skript für die Systemüberwachung erstellt und es so geplant, dass es stündlich ausgeführt wird
- Spezielle Zeitangaben wie
@dailyfür häufige Planungsmuster verwendet - Gelernt, wie man die Ausgabe von Cron-Jobs verwaltet
Diese Fähigkeiten sind für jeden Linux-Benutzer oder Systemadministrator unerlässlich. Mit Crontab können Sie routinemäßige Aufgaben automatisieren, wie z. B.:
- Systemwartung und -bereinigung
- Datensicherung und -synchronisierung
- Protokollrotation und -verwaltung
- Regelmäßige Systemüberprüfungen und -überwachung
- Geplante Berichterstellung
Durch die effektive Planung von Jobs können Sie die Systemzuverlässigkeit erhöhen, die manuelle Intervention reduzieren und Ihren Arbeitsablauf optimieren. Denken Sie immer daran, Ihre Cron-Jobs gründlich zu testen und die Auswirkungen der geplanten Aufgaben auf die Systemleistung zu berücksichtigen.
Setzen Sie die Erkundung der Möglichkeiten von Crontab und anderer Linux-Planungstools fort, um Ihre Automatisierungsfähigkeiten weiter zu verbessern.



