Files
mkdocs-etz/mkdocs/docs/basics/Automatisierung mit cron und systemd.md
Florian Hensel f9473a3578 Anpassung aller Samba-Dokumente als Projekt
ADDC als Bonus
2025-12-10 12:41:50 +01:00

135 lines
4.0 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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> # Service sofort starten
sudo systemctl enable <service> # Service beim Boot aktivieren
sudo systemctl status <service> # Status anzeigen
sudo systemctl stop <service> # 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