In der Systemadministration sind viele Aufgaben regelmäßig wiederkehrend, wie das Erstellen von Backups, das Überwachen von Systemressourcen oder das Bereinigen von temporären Dateien. Linux bietet mächtige Tools, um diese Aufgaben automatisiert und geplant durchzuführen: Cron und At. In diesem Tutorial werden Sie lernen, wie Sie diese Tools verwenden, um Jobs zu planen und zu automatisieren, und wie Sie administrative Routineaufgaben effizienter gestalten können.
1. Cron: Regelmäßige Jobs planen
1.1 Was ist Cron?
Cron ist ein Daemon, der im Hintergrund läuft und geplante Aufgaben (Cron-Jobs) zu festgelegten Zeiten oder Intervallen ausführt. Sie können damit Aufgaben automatisieren, die regelmäßig ausgeführt werden müssen, z. B. stündlich, täglich, wöchentlich oder monatlich.
1.2 Cron-Tabellen (Crontabs)
Cron verwendet Tabellen, die Crontabs genannt werden, um die geplanten Aufgaben für verschiedene Benutzer und das System zu speichern. Jeder Benutzer hat seine eigene Crontab, und es gibt auch eine System-Crontab.
Um die Crontab eines Benutzers zu bearbeiten, verwenden Sie den Befehl:
crontab -e
Dadurch öffnet sich ein Texteditor, in dem Sie die geplanten Aufgaben festlegen können.
1.3 Aufbau eines Cron-Jobs
Jeder Eintrag in einer Crontab besteht aus zwei Teilen: Zeitplan und Befehl. Der Zeitplan wird in fünf Feldern angegeben, die die Minute, Stunde, den Tag des Monats, den Monat und den Wochentag repräsentieren. Der Befehl gibt an, welches Skript oder welcher Befehl ausgeführt werden soll.
Syntax:
* * * * * /pfad/zu/befehl
| | | | |
| | | | +-- Wochentag (0 - 7) (Sonntag = 0 oder 7)
| | | +---- Monat (1 - 12)
| | +------ Tag des Monats (1 - 31)
| +-------- Stunde (0 - 23)
+---------- Minute (0 - 59)
Beispiele für Cron-Jobs:
- Ein Skript jeden Tag um 3:30 Uhr ausführen:
30 3 * * * /pfad/zu/skript.sh
Einen Job jeden Montag um 6:00 Uhr morgens ausführen:
0 6 * * 1 /pfad/zu/befehl
Einen Befehl jede Minute ausführen (für Testzwecke):
* * * * * /pfad/zu/befehl
1.4 Cron-Jobs für das System
Es gibt spezielle Verzeichnisse, in denen Sie Skripte platzieren können, die automatisch zu bestimmten Zeiten vom System ausgeführt werden:
/etc/cron.hourly
: Ausführung jede Stunde./etc/cron.daily
: Ausführung jeden Tag./etc/cron.weekly
: Ausführung jede Woche./etc/cron.monthly
: Ausführung jeden Monat.
Skripte, die in diese Verzeichnisse gelegt werden, werden vom Cron-Daemon zu den angegebenen Intervallen ausgeführt, ohne dass eine spezielle Crontab bearbeitet werden muss.
1.5 Cron-Logs und Fehlerbehebung
Cron speichert standardmäßig keine Ausgaben von Jobs, es sei denn, Sie leiten diese explizit um. Um die Ausgabe von Cron-Jobs zu überwachen oder Fehler zu diagnostizieren, können Sie die Ausgabe in eine Datei umleiten:
* * * * * /pfad/zu/skript.sh >> /pfad/zu/logfile.log 2>&1
>> /pfad/zu/logfile.log
: Leitet die Standardausgabe des Befehls in eine Logdatei.2>&1
: Leitet die Standardfehlerausgabe in dieselbe Datei um.
Logs für Cron-Jobs finden Sie auch in /var/log/syslog
oder /var/log/cron
(abhängig von der Distribution).
2. At: Einmalige Jobs planen
Während Cron für wiederkehrende Aufgaben verwendet wird, eignet sich At für einmalige, zukünftige Aufgaben.
2.1 Installation von At
Falls At nicht bereits installiert ist, können Sie es auf den meisten Distributionen installieren:
sudo apt install at
Oder auf CentOS/RHEL:
sudo yum install at
2.2 Einmalige Jobs mit At planen
Um eine Aufgabe mit At zu planen, verwenden Sie den Befehl at
, gefolgt von der Zeit, zu der die Aufgabe ausgeführt werden soll:
echo "Befehl" | at [Zeit]
Beispiele:
- Ein Skript um 14:30 Uhr ausführen:
echo "/pfad/zu/skript.sh" | at 14:30
Eine Aufgabe morgen um 10 Uhr planen:
echo "Befehl" | at 10am tomorrow
2.3 Zeitangaben in At
At verwendet flexible Zeitangaben. Neben exakten Zeiten (wie „14:30“ oder „10:00“) können Sie auch relative Angaben wie „now + 2 hours“ (in 2 Stunden) oder „next Monday“ verwenden.
Weitere Beispiele:
- In 15 Minuten:
echo "Befehl" | at now + 15 minutes
Nächsten Freitag um 18:00 Uhr:
echo "Befehl" | at 6pm next Friday
2.4 At-Jobs verwalten
Um eine Liste der geplanten Jobs anzuzeigen, verwenden Sie den Befehl:
atq
Um einen geplanten Job zu löschen, verwenden Sie den Befehl atrm
gefolgt von der Job-ID, die in der Ausgabe von atq
angezeigt wird:
atrm [Job-ID]
3. Beispiele für häufige Automatisierungen
3.1 Backup-Job täglich um Mitternacht planen
Backups sind eine häufige Systemadministrationsaufgabe. Sie können einen einfachen Backup-Job mit Cron planen:
- Erstellen Sie ein Skript, das das Backup durchführt, z. B.
/home/backup.sh
:
#!/bin/bash
tar -czf /backup/$(date +\%F).tar.gz /home/userdata
Fügen Sie einen Cron-Job hinzu, der das Skript täglich um Mitternacht ausführt:
0 0 * * * /home/backup.sh
3.2 Automatische Bereinigung von temporären Dateien
Temporäre Dateien in /tmp
können über die Zeit viel Speicherplatz belegen. Sie können einen Cron-Job einrichten, um diese regelmäßig zu bereinigen:
Befehl, um Dateien älter als 7 Tage zu löschen:
find /tmp -type f -mtime +7 -exec rm {} \;
Cron-Job, der diesen Befehl jede Woche ausführt:
0 3 * * 0 find /tmp -type f -mtime +7 -exec rm {} \;
3.3 Systemüberwachung und Protokollrotation
Systemüberwachung ist entscheidend, um die Gesundheit eines Servers sicherzustellen. Mit Cron können Sie regelmäßig Ressourcen wie CPU, Speicher und Festplattennutzung überwachen und Protokolldateien regelmäßig rotieren lassen.
Beispiel für einen Monitoring-Cron-Job, der jede Stunde Systemdaten in eine Logdatei schreibt:
0 * * * * top -b -n 1 | head -n 20 >> /var/log/system_monitor.log
4. Zusammenfassung
Die Automatisierung von Systemadministrationsaufgaben mit Cron und At kann viel Zeit und Mühe sparen. Cron eignet sich hervorragend für regelmäßig wiederkehrende Aufgaben, während At für einmalige Jobs verwendet wird. Durch den Einsatz dieser Tools können Sie Routineaufgaben wie Backups, Systemüberwachung, Bereinigungen und andere administrative Tätigkeiten zuverlässig und ohne ständige manuelle Eingriffe erledigen.
Indem Sie geplante Jobs sorgfältig konfigurieren und deren Ausführung überwachen, tragen Sie entscheidend zur Stabilität und Effizienz des Systems bei.