Beschreibung: Prüfungskandidaten sollten in der Lage sein, cron oder anacron zu verwenden, um Prozesse in regelmäßigen Intervallen ausführen zu lassen, und at zu benutzen, um Jobs zu einer bestimmten Zeit auszuführen. Dies beinhaltet das Verwalten von cron und at Jobs und die Konfiguration von Benutzerzugang zu cron und at Diensten.
Die wichtigsten Dateien, Bezeichnungen und Anwendungen:
Systemverwaltungsaufgaben bestehen zu einem großen Teil aus immer wiederkehrenden Routinejobs. Diese Routine kann durch Kommandos vereinfacht werden, die automatisch immer wieder in bestimmten Intervallen oder zu bestimmten Zeiten ausgeführt werden. Für diese Aufgabe existiert ein eigener Daemon, der cron-Daemon. Er kann auf verschiedene Weisen konfiguriert werden, die hier genauer beschrieben werden sollen.
Manche Aufgaben sind aber nicht regelmäßig auszuführen, sondern nur genau einmal, aber zu einem ganz bestimmten Zeitpunkt. Diese Aufgabe wird vom at-Daemon gelöst, der genau dazu gemacht ist.
Cron läd beim Start all die Dateien und Verzeichnisse, die er überwacht in den Arbeitsspeicher und überprüft jede Minute einmal, ob darin Jobs enthalten sind, die in der aktuellen Minute ausgeführt werden sollen. Wenn ja, so führt er sie aus. Außerdem überprüft cron jede Minute, ob sich an den Dateien oder Verzeichnissen etwas geändert hat und - falls ja - übernimmt er diese Änderungen im Speicher.
Es gibt also mehrere Möglichkeiten, dem Cron-Daemon einen Job zur Ausführung zu übergeben. Die einzelnen Möglichkeiten sind:
Name=WertEinige Variablen werden von Cron selbst gesetzt. SHELL wird auf /bin/sh gesetzt, HOME und LOGNAME werden den Informationen über den User aus der /etc/passwd entnommen. Die Variablen SHELL und HOME dürfen verändert werden, LOGNAME nicht.
Normalerweise schickt cron alle Ausgaben von ausgeführten Kommandos per Mail an den User, der das Cron-Kommando ausführen liess. Die Variable MAILTO kann diese Eigenschaft verändern. Wenn sie den Namen eines Users enthält, so werden ihm und nicht dem ursprünglichen Cron-User die Mail geschickt. Ist die Variable MAILTO definiert, aber leer, so wird gar keine Mail verschickt.
Alle anderen Zeilen der Crontabs, die also nicht Variablen definieren, beschreibt Kommandos, die zu bestimmten Zeiten ausgeführt werden sollen. Das grundlegende Format dieser Zeilen ist:
Minute Stunde Tag Monat Wochentag KommandoDie einzelnen Felder definieren also die Zeit, zu der das angegebene Kommando ausgeführt werden soll. Jedes der fünf Zeitfelder darf statt einem Wert auch ein Sternchen (*) enthalten, das als Jokerzeichen gilt und für jeden beliebigen Wert steht.
Die jeweiligen Zeitfelder dürfen folgende Werte aufnehmen:
Minute | 0-59 |
---|---|
Stunde | 0-23 |
Tag | 1-31 |
Monat | 1-12 |
Wochentag | 0-7 (0 und 7 bedeutet Sonntag) |
Auch Bereichsangabe sind erlaubt. Bereiche werden mit Bindestrich definiert. So würde die Angabe 8-11 im Stundenfeld die Stunden 8, 9, 10 und 11 meinen.
Auch Listen sind erlaubt. Listen werden durch Kommata aufgebaut. So würde die Angabe 1,2,5 im Wochentagfeld die Tage Montag, Dienstag und Freitag meinen.
Auch Kombinationen von Listen und Bereichen sind möglich. Die Angabe 1,3,15-19,30 spricht also die Zahlen 1, 3, 15, 16, 17, 18, 19 und 30 an.
Im Zusammenhang mit Bereichen können sogar Schrittweiten angegeben werden. Die Angabe 0-23/2 im Stundenfeld meint also die Stunden 0-23 aber in der Schrittweite 2 Stunden. Also 0, 2, 4, 6, 8, 10, .... Um diesen Schritt zu vervollständigen kann z.B. die Angabe alle zwei Stunden" einfach mit */2 ausgedrückt werden. Gleiches gilt für alle anderen Zeitfelder.
Das Wochentagfeld und das Tag-Feld sind - wenn beide angegeben sind - aditiv gemeint. Die Angabe
* * 13 * 5 ...meint also nicht alle Freitag der 13., sondern alle Freitage und alle 13. des Monats.
Die letzte Angabe in einer Crontab-Zeile ist der Befehl, der zur gegebenen Zeit ausgeführt werden soll. Er wird von /bin/sh oder der in der Variable SHELL angegebenen Shell ausgeführt.
Eine Beispiel-Crontab könnte also folgendermaßen aussehen - mit Kommentaren zum besseren Verständnis:
# Variablendefinition SHELL=/bin/bash PATH=/usr/bin:/bin # Cronbefehle # Das Programm foo wird täglich um 23 Uhr 56 ausgeführt 56 23 * * * foo # Das Programm backup wird jeden Freitag um 17 Uhr 30 ausgeführt 30 17 * * 5 backup # Alle 2 Stunden zwischen 6 und 23 Uhr wird das Programm fetchmail # ausgeführt 0 6-23/2 * * * fetchmail # Am ersten jedes Monats wird um 8 Uhr morgens das Programm bar ausgeführt 0 8 1 * * barWenn der User, dem der crontab gehört die UserID 0 hat, also der Systemverwalter ist, dann kann eine Crontab-Zeile mit einem Bindestrich beginnen. In diesem Fall wird cron die ausgeführte Aktion nicht an den Syslog-Daemon weiterleiten. In jedem anderen Fall wird jede Cron-Aktion ins Logbuch übernommen und kann dort im Nachhinein überprüft werden.
Dieses Programm erlaubt einem User, die folgenden Aktionen:
crontab Dateinamezu seinem Crontab machen.
crontab -lkann sich ein User seine Crontab am Bildschirm anzeigen lassen.
crontab -rbenutzen. Die ganze Crontab-Datei des Users wird dadurch gelöscht - alle bisherigen Jobs sind damit automatisch auch gelöscht. Die Veränderung wird sofort aktiv.
crontab -ekann ein User seine Crontab-Datei editieren. Dazu wird der Editor aufgerufen, der in der Umgebungsvariable VISUAL bzw. EDITOR definiert ist - meist also der vi. Alle Veränderungen, die vom User dort vorgenommen werden, werden sofort nach dem Sichern und Verlassen des Editors aktiv.
Der Systemverwalter kann dem Programm crontab mit der Option -u username auch noch den User mitgeben, dessen Eintrag bearbeitet werden soll. Er kann also die Einträge jedes Users erstellen, löschen, ansehen und editieren. Ein Normaluser darf selbstverständlich nur seine eigene Datei bearbeiten.
Minute Stunde Tag Monat Wochentag Username KommandoAlle anderen oben genannten Eigenschaften bleiben unverändert, also auch die Bereichs- und Listenangabe der Zeitfelder.
Diese Dateien dürfen nur vom Systemverwalter angelegt und editiert werden, er kann aber durch das zusätzliche Userfeld bestimmen, unter wessen UserID der Befehl ausgeführt werden soll.
/etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthlyDiese Verzeichnisse enthalten keine Crontabs, sondern Programme, die entsprechend stündlich, täglich, wöchentlich oder monatlich einmal ausgeführt werden sollen. In der Regel handelt es sich bei diesen Programmen um Shellscripts, die dann wiederum bestimmte Programme aufrufen. Standardeinstellungen, wann diese Programme ausgeführt werden sind:
In der Regel sind diese Verzeichnisse für regelmäßige Kommandos gemacht, die schon beim Installieren bestimmter Pakete festgelegt sind. Zumeist tragen die Scripts innerhalb dieser Verzeichnisse die Namen der Pakete, die sie installiert haben.
Wie so oft, gibt es hier zwei verschiedene Lösungsansätze. Entweder dürfen nur die User Crontab benutzen, die die ausdrückliche Erlaubnis besitzen, oder alle User dürfen crontab benutzen, denen es nicht explizit verboten wurde.
Dazu kann der Systemverwalter im Verzeichnis /etc mit zwei Dateien arbeiten, die er dort anlegen muß. Die folgenden Möglichkeiten existieren:
Existiert die Datei /etc/cron.allow, dann dürfen nur die User mit crontab arbeiten, die in dieser Datei aufgelistet sind.
Wenn die Datei /etc/cron.allow nicht existiert, stattdessen aber die Datei /etc/cron.deny, dann dürfen alle User mit crontab arbeiten, außer denen, die in der Datei cron.deny aufgelistet sind.
Beide Dateien sind reine Textdateien, die pro Zeile einen Usernamen enthalten dürfen.
In älteren Versionen von Cron lagen diese beiden Dateien nicht in /etc sondern hießen /var/spool/cron/allow und /var/spool/cron/deny. Die Funktionsweise war aber die selbe. Auf manchen älteren Linux-Versionen finden sich noch diese älteren Einstellungen. Nach der Revision hat LPI aber auf die neuen Dateien umgestellt.
Wenn cron einen bestimmten Job zu einer Zeit ausführen soll, zu der der Rechner nicht angeschalten ist, dann verfällt dieser Job. Oft ist es zum Beispiel so, daß die täglichen cron-Jobs um 0:00 Uhr ausgeführt werden sollen oder die wöchentlichen am Sonntag (Tag 0). Wenn ein Rechner aber weder Sonntags, noch Nachts läuft, werden diese Jobs niemals ausgeführt. Meist handelt es sich bei diesen Jobs um Verwaltungsaufgaben, wie der Auffrischung bestimmter Systemdatenbanken (locate und man) oder der Rotation der Logdateien.
Anacron kann dieses Problem lösen. Man kann einfach diese Jobs in Intervallen von einem, sieben oder 30 Tagen starten um tägliche, wöchentliche oder monatliche Ausführung zu erzwingen. Anacron führt seine Jobs aus, wenn der letzte Ablauf eines Jobs länger als die genannte Intervallzeit in Tagen her ist. Somit wird ein Job auch dann ausgeführt, wenn der Rechner das nächste Mal angeschalten wird und nicht - wie bei cron - wenn das nächste Wochen- oder Monatsende erreicht ist.
Jedesmal, wenn anacron aufgerufen wird, ließt es seine Konfigurationsdatei (/etc/anacrontab) in der seine Jobs mit den Perioden eingestellt werden. Wenn ein Job die letzten n Tage nicht ausgeführt wurde, wobei n die angegebene Periode dieses Jobs ist, führt anacron ihn aus. Anacron erzeugt dann einen Eintrag in einer speziellen Zeitmarkendatei, die es für jeden Job erstellt, so daß es weiß, wann der Job zuletzt ausgeführt wurde. Wurden alle Kommandos ausgeführt, wird anacron beendet.
Anacron ist also kein Daemon, der die ganze Zeit läuft, sondern muß entweder über init-Scripts oder cron regelmäßig gestartet werden.
Die Konfigurationsdatei von anacron ist sehr einfach aufgebaut. Sie enthält entweder Variablenzuweisungen, die der Umgebung zugewiesen werden, in der der entsprechende Befehl ausgeführt werden soll, oder Befehlszeilen der Form
Periode Verzögerung Job-Identifikation KommandoDie Periode ist eine Zahl, die die Anzahl von Tagen angibt, die zwischen der letzten Ausführung des Jobs und der nächsten Ausführung mindestens vergangen sein müssen. Die Verzögerung ist ein Wert in Minuten, der angegeben wird, damit nicht alle anacron-Jobs gleichzeitig gestartet werden und so den Rechner unnötig strapazieren. Somit können die verschiedenen Jobs leicht zeitversetzt gestartet werden. Die Job-Identifikation ist ein beliebiges Wort, daß alle Zeichen außer Leerzeichen und Slashs enthalten darf. Mit Hilfe dieses Wortes wird der Dateiname der Zeitmarkendatei erstellt (das ist der Grund für die verbotenen Slashs). Am Ende der Zeile steht dann der auszuführende Befehl. Eine simple /etc/anacrontab Datei könnte also folgendermaßen aussehen:
SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 1 1 updatedb updatedb 7 10 logrotate logrotate /etc/logrotate.conf 31 15 tmpclean rm /tmp/*Jeden Tag, eine Minute nachdem anacron gestartet wurde, wird der Befehl updatedb ausgeführt. Die Zeitmarke wird in eine Datei heißt ebenfalls updatedb.
Alle 7 Tage jeweils 10 Minuten nach dem Start von anacron wird der Befehl logrotate /etc/logrotate.conf ausgeführt. Die Zeitmarkendatei heißt nur logrotate.
Alle 31 Tage werden alle Dateien im /tmp Verzeichnis gelöscht, die Zeitmarkendatei heißt tmpclean. Der Befehl wird 15 Minuten nach Aufruf von anacron gestartet.
Hat anacron all diese drei Befehle abgearbeitet, dann beendet sich das Programm wieder.
Um mit at einen Job in Auftrag zu geben, muß einfach nur der Befehl
at Zeitaufgerufen werden. Danach kann über die Standard-Eingabe die gewümschte Befehlszeile eingegeben werden, die zu der Angegebenen Zeit ausgeführt werden soll. Um die Eingabe abzuschließen, wird in einer eigenen Zeile das Dateiendezeichen Strg-D eingegeben. Alternativ kann eine Datei angelegt werden, die die Befehle enthält, die zu der bestimmten Zeit ausgeführt werden sollen. Dann kann at entweder mit
at Zeit < Dateioder mit
at -f Datei Zeitaufgerufen werden.
Die verschiedenen Formen der Zeitangaben enthehmen Sie bitte der Handbuchseite.
Die Ausgaben der Kommandos, die von at zu bestimmten Zeiten ausgeführt wurden, werden dem User als Mail zugeschickt, der den Auftrag losgeschickt hatte.
Wie schon bei cron, so können wir auch bei at festlegen, wer mit diesem Programm arbeiten darf bzw. wer nicht. Dazu dienen die Dateien /etc/at.allow und /etc/at.deny. Existiert die Datei /etc/at.allow, so dürfen nur die User mit at arbeiten, die dort aufgeführt sind (ein User pro Zeile). Existiert diese Datei nicht, aber die Datei /etc/at.deny, so dürfen alle User at benutzen, außer den Usern, die in at.deny aufgelistet sind. Existieren beide Dateien nicht, so darf nur der Systemverwalter mit at arbeiten.