# Automatisierung mit cron und systemd Stellen Sie sich vor, Sie betreiben einen Server oder eine Anwendung, die rund um die Uhr laufen muss. Als IT-Meister möchten Sie jederzeit nachvollziehen können, ob Ihr System aktiv ist und wann es zuletzt gestartet wurde. Dafür können Sie zwei klassische Linux-Automatisierungswerkzeuge nutzen: * **Cronjob:** Führt regelmäßig Aufgaben aus, z.B. jede Minute, jede Stunde oder einmal täglich. * **systemd-Unit:** Startet Aufgaben beim Systemstart oder zu bestimmten Ereignissen. Mit diesen Werkzeugen können Sie z.B. eine Datei anlegen oder aktualisieren, um so einen „Herzschlag" (Heartbeat) Ihres Systems zu dokumentieren. ## Cron-Job: Jede Minute eine Datei aktualisieren ### Praxisbeispiel: Heartbeat-File Sie möchten, dass jede Minute der Zeitstempel einer Datei (/tmp/heartbeat.txt) aktualisiert wird. Das ist nützlich, um zu prüfen, ob Cron und das System laufen. **So geht's:** Öffnen Sie die Crontab des aktuellen Benutzers: ``` crontab -e ``` Fügen Sie folgende Zeile hinzu: ``` * * * * * /usr/bin/touch /tmp/heartbeat.txt ``` Jetzt wird jede Minute die Datei /tmp/heartbeat.txt neu angelegt oder ihr Zeitstempel aktualisiert. Prüfen Sie das ergebnis, indem Sie sich den Zeitstempel der neuen Datei anschauen: ```bash ls -lah /tmp/heartbeat.txt ``` \newpage ### Crontab-Syntax erklärt: | Feld | Bedeutung | Wert im Beispiel | Bedeutung | | ----------* | --------------* | --------------------------------* | ------------------* | | Minute | 0-59 | \* | jede Minute | | Stunde | 0-23 | \* | jede Stunde | | Tag (Monat) | 1-31 | \* | jeder Tag | | Monat | 1-12 | \* | jeder Monat | | Tag (Woche) | 0-7 (0/7 = Son) | \* | jeder Wochentag | | Befehl | Befehl | /usr/bin/touch /tmp/heartbeat.txt | Was wird ausgeführt | **Beispiel:** ``` * * * * * /usr/bin/touch /tmp/heartbeat.txt ``` → Jede Minute wird die Datei angefasst („touched"). **Weitere Beispiele:** ``` 0 0 * * * /usr/bin/touch /tmp/midnight.txt ``` * jeden Tag um Mitternacht ``` */5 * * * * /usr/bin/touch /tmp/every5min.txt ``` * alle 5 Minuten beginnend 5 Minuten ## systemd-Unit: Datei beim Systemstart aktualisieren ### Praxisbeispiel: Boot-Marker Sie möchten beim Systemstart eine Datei (/tmp/boot.txt) anlegen oder deren Zeitstempel aktualisieren, um den letzten Bootvorgang zu protokollieren. **So geht's:** Erstellen Sie eine neue systemd-Service-Datei: ```shellscript sudo nano /etc/systemd/system/touch-at-boot.service ``` Fügen Sie folgenden Inhalt ein: ```ini [Unit] Description=Touch file at boot [Service] Type=oneshot ExecStart=/usr/bin/touch /tmp/boot.txt [Install] WantedBy=multi-user.target ``` 1. Datei speichern und schließen. 2. Service aktivieren und testen: ```shellscript sudo systemctl daemon-reload sudo systemctl enable touch-at-boot.service sudo systemctl start touch-at-boot.service ``` Nach jedem Neustart wird /tmp/boot.txt aktualisiert. **systemd-Unit erklärt:** ```ini [Unit]: Metadaten und Abhängigkeiten Description: Kurze Beschreibung [Service]: Was soll gemacht werden? Type=oneshot: Einmaliger Befehl, kein dauerhafter Prozess der überwacht werden könnte ExecStart: Der auszuführende Befehl [Install]: Wann/wo soll der Service gestartet werden? WantedBy=multi-user.target: Startet beim normalen Systemstart ``` **systemd-Kommandos:** ```shellscript sudo systemctl start # Service sofort starten sudo systemctl enable # Service beim Boot aktivieren sudo systemctl status # Status anzeigen sudo systemctl stop # Service stoppen ``` **Wann nutze ich was?** * **Cronjob**: Für wiederkehrende Aufgaben (regelmäßig, z.B. jede Minute, stündlich, täglich) * **systemd-Unit**: Für Aufgaben beim Systemstart, beim Herunterfahren oder bei bestimmten Ereignissen