Verständnis von Cron Jobs und Cron-Syntax
In diesem Schritt werden wir Cron Jobs und die Cron-Syntax einführen.
Cron Jobs sind "geplante Aufgaben" (scheduled tasks) im Linux-System und werden üblicherweise verwendet, um Befehle zu planen, die in regelmäßigen Abständen ausgeführt werden müssen, wie z. B. regelmäßige Datensicherungen oder das Leeren des Caches. Sie werden Cron Jobs genannt, weil sie das cron
-Tool (crontab) nutzen.
Cron Jobs gehören zu den am häufigsten von Systemadministratoren verwendeten Tools und sind an sich ausgezeichnete Hilfsmittel. Wenn jedoch "geplante Aufgaben" so eingerichtet sind, dass sie mit höheren Benutzerrechten (z. B. als root-Benutzer) ausgeführt werden, können Angreifer diese möglicherweise ausnutzen, um ihre Benutzerrechte zu erhöhen.
Das crontab
-Kommando verwendet die folgende Syntax:
* * * * * [ user ] File/Command
- - - - -
| | | | |
| | | | +----- Wochentag (0 - 7) (0 = Sonntag)
| | | +---------- Monat (1 - 12)
| | +--------------- Tag des Monats (1 - 31)
| +-------------------- Stunde (0 - 23)
+------------------------- Minute (0 - 59)
Das user
-Feld ist optional. Wenn es nicht angegeben wird, wird der Befehl oder das Skript mit den Rechten des aktuellen Benutzers ausgeführt.
Beachten Sie, dass nur der root-Benutzer angeben kann, dass Befehle oder Skripte mit den Rechten anderer Benutzer ausgeführt werden.
Beispielsweise können wir, wenn wir die Apache-Fehlerprotokolle (error log) jede Stunde ausgeben möchten, die folgende Anweisung verwenden:
0 * * * * echo /var/log/lastlog
Da Stunde
, Tag
, Monat
und Woche
alle auf *
gesetzt sind, wird die geplante Aufgabe einmal ausgeführt, wenn die Minute auf 0 steht, also jede Stunde.
Was ist, wenn wir einen Befehl alle zwei Stunden um die 15. Minute ausführen müssen? Wir können eine einfache Änderung vornehmen:
15 */2 * * * echo /var/log/lastlog
Um die Verwendung von cron
zu verstehen, gehen wir ein Beispiel durch.
-
Öffnen Sie das Terminal und navigieren Sie in das Verzeichnis /home/labex/project
. Führen Sie dann den folgenden Befehl aus, um die Lab-Umgebung zu initialisieren:
./env_setup1.sh
Nach erfolgreicher Initialisierung werden Sie im Home-Verzeichnis des labex
-Benutzers die Datei cleanup.py
und das Verzeichnis trashDirectory
sehen. Das trashDirectory
-Verzeichnis enthält zwei Dateien: error.log
und readme.txt
.
Unser Lab-Ziel lautet wie folgt: Verwenden Sie crontab
, um eine geplante Aufgabe hinzuzufügen, die das cleanup.py
-Skript alle 1 Minute aufruft, um alle Daten im Verzeichnis /home/labex/project/trashDirectory
zu löschen. Das cleanup.py
-Skript ruft einfach den rm
-Systembefehl über die os.system()
-Funktion auf, um das Verzeichnis /home/labex/project/trashDirectory
zu leeren.
-
Fügen Sie als Nächstes mit dem folgenden Befehl eine geplante Aufgabe in die crontab
hinzu:
echo "* * * * * root python /home/labex/project/cleanup.py" | sudo tee -a /etc/crontab > /dev/null
Der obige Befehl fügt eine geplante Aufgabe zur crontab
-Datei hinzu. Die Aufgabe wird jede Minute
ausgeführt, und das cleanup.py
-Skript wird mit root-Rechten ausgeführt.
-
Da der cron
-Dienst auf unserem Lab-Rechner standardmäßig deaktiviert ist, müssen wir ihn manuell mit dem folgenden Befehl starten:
sudo service cron start
Erwartete Ausgabe:
* Starting periodic command scheduler cron
Nach etwa einer Minute
, wenn wir in das Verzeichnis /home/labex/project/trashDirectory
wechseln und den ls
-Befehl verwenden, werden wir sehen, dass die Daten im Verzeichnis gelöscht wurden, was bedeutet, dass der Cron Job korrekt ausgeführt wird.