Automatisierung von Systemadministrationsaufgaben

Wichtung: 4

Beschreibung: Die Kandidaten sollen in der Lage sein, cron und anacron zu nutzen, um Jobs regelmäßig und at um sie zu einem bestimmten Zeitpunkt zu starten.

Wichtigste Wissensgebiete:
cron- und at-Jobs verwalten.
Konfiguration des Benutzerzugriffs auf cron- und at-Dienste.

Liste wichtiger Dateien, Verzeichnisse und Anwendungen:
/etc/anacrontab
/etc/at.deny
/etc/at.allow
/etc/crontab
/etc/cron.allow
/etc/cron.deny
/var/spool/cron/*
at
atq
atrm
crontab

cron-Daemon - Zeitschaltuhr für administrative Aufgaben

Auf einem Linux-System gibt es immer wieder Aufgaben und Wartungen, die regelmäßig durchgeführt werden müssen. So führt man beispielsweise in regelmäßigen Abständen die Aktualisierung der Verzeichnis-Indexierung (slocate) durch oder erstellt ein Backup von bestimmten Verzeichnissen. Dies sind zwei typische Beispiele, aber logischerweise gibt es noch zahlreiche weitere administrative Aufgaben, die regelmäßig anstehen. Damit der Linux-Systemverwalter nicht unnötige Zeit damit verbringt, diese Aufgaben manuell anzustoßen, gibt es einen Dämon, der Programme und Skripte automatisiert startet. Dieser Dämon nennt sich cron.

Der cron-Dämon macht nichts anderes als in bestimmten Zeitabständen Skripte und Programme zu starten. Hier hat der Systemverwalter und die Benutzer die Möglichkeit, die Skripte stündlich, täglich, wöchentlich, monatlich oder individuell ausführen zu lassen.

crontab - Definieren der Jobs

Der Cron-Dämon benutzt eine Konfigurationsdatei mit einer speziellen Syntax, in welcher die Jobs zum Ausführen definiert werden. Diese so genannte crontab Datei beinhaltet Angaben zum Zeitpunkt und Verzeichnissen, in welcher sich die Programme zum Ausführen befinden. Die Syntax lautet wiefolgt:

Minute  Stunde  Tag  Monat  Wochentag           Kommando

Es ist nun möglich, die Zeiten in einer Zeile zu definieren, also für Minute 0-59, Stunde 0-23, Tag 1-31, Monat 1-12 und Wochentag 0-7. Folgendes Beispiel erklärt das Prinzip:

#M    S   T M W    Befehl
5 20 * * * /usr/bin/message.sh
*/5 * * * * /usr/bin/message.sh
0 6-23/2 * * * cp /var/log/messages /log/backup/messages
0 0 * * * cp /var/log/syslog /log/backup/syslog
20,30 1 * * 1-5 /usr/bin/work.sh

1. Zeile: Täglich um 20.05 Uhr
2. Zeile: Alle fünf Minuten
3. Zeile: Von 6.00 bis 23.00 Uhr, alle zwei Stunden
4. Zeile: Täglich um 0.00 Uhr
5. Zeile: Montags bis Freitags, jeweils um 1.20 und 1.30 Uhr

Bemerkung: Der Schrägstrich (/) teilt einen Zeitraum ein. Der Bindestrich (-) gibt einen Zeitraum an, also von bis. Ein Komma (,) lässt mehrere Zeitangaben zu.

Jobs anlegen - Verschiedene Möglichkeiten

Es gibt mehrere Möglichkeiten, Cron-Jobs anzulegen. Hauptsächlich kann man benutzerdefinierte und sytemweite Jobs unterscheiden.

/etc/crontab - Systemweite Crontab-Datei
Die Datei /etc/crontab ist die systemweite Crontab-Datei und wird vom Systemverwalter administriert. Hier werden in der Regel allgemeine Systemaufgaben wie beispielsweise die Aktualisierung der slocate-Datenbank definiert.

Benutzer-Crontabs
Damit auch einfache Benutzer Cron-Jobs definieren können, gibt es das Tool crontab. Hier die wichtigsten Befehle:

crontab Dateiname = Anlegen einer User-Crontab-Datei
crontab -l = Anzeigen der eigenen Crontab-Datei
crontab -r = Löschen der eigenen Crontab-Datei
crontab -e = Bearbeiten der eigenen Crontab-Datei

cron.hourly/daily/weekly/monthly Verzeichnisse in /etc
In diesen Verzeichnissen kann man shellscripts ablegen, die tündlich, täglich, wöchentlich oder monatlich ausgeführt werden.

/etc/cron.allow und /etc/cron.deny

Der Systemverwalter hat die Möglichkeit, nur bestimmten Benutzern die Möglichkeit zu geben, eigene Cron-Jobs einzurichten. Hier gibt es zwei Strategien: Entweder man verbietet grundsätzlich allen Benutzern das Erstellen von Cronjobs und schaltet dann die gewünschten User frei (/etc/cron.allow) oder man schaltet alle Benutzer frei und verbietet die nicht erwünschten Benutzer (/etc/cron.deny)

Welche Strategie angewand wird hängt davon ab, ob die Datei /etc/cron.allow oder /etc/cron.deny existiert. In diesen Dateien werden lediglich die Benutzernamen notiert:

// Auszug /etc/cron.deny
peter
susanne
harry
...usw...

at - Jobs zu bestimmter Zeit starten

Mit at lassen sich Kommandos zu einem späteren Zeitpunkt ausführen. at nimmt Aufträge entgegen, stellt diese in eine Warteschlange (ähnlich dem Prinzip von Druckaufträgen) und führt diese zu einem bestimmten Zeitpunkt aus. at erwartet einen Zeitpunkt, wann der Job erledigt werden soll. Es gibt folgende Formate:

12:30 = Heute um 12.30 Uhr
midnight = 0.00 Uhr
noon = 12.00 Uhr
teatime = 16.00 Uhr
8:30pm = 20.30 Uhr
8:30am = 8.30 Uhr
30.05 = 30.05 dieses Jahres
12/12/07 = Am 12.12.2007
tomorrow, today = »Morgen« und »heute«.

Beispiel:

# at 12.30 tomorrow
at> /home/backup.sh
at> [Ctrl]-[D] <eot>
warning: commands will be executed using /bin/sh
job 3 at 2007-06-07 12.30</eot>

atq - Jobliste anzeigen lassen

Mit dem Befehl atq kann man sich die Jobs in der Warteschlange anzeigen lassen:

# atq
1 2007-05-06 15:00 a
3 2007-05-07 15:00 a
4 2007-05-02 05:07 a
5 2007-06-11 10:16 b

atrm - Jobs löschen

Mit dem Befehl atrm kann man Jobs aus der Warteschlange löschen. atrm erwartet als Parameter lediglich die Job-ID's:

# atrm 5 6 10 12

Weitere Quellen

http://www.linuxfibel.de/weiteres.htm#at
http://www.linux-praxis.de/lpic1/lpi102/1.111.4.html