Vorheriger Abschnitt Inhaltsverzeichnis Nächster Abschnitt

7.10 Zeitgesteuerte Befehle

a) einzelne Jobs ausführen mit "at"

Manchmal müssen Sie einmalig einen Befehl zu einem bestimmten Zeitpunkt ausführen lassen. Das kann zum Beispiel sein, dass der Internetzugang an einem Tag der offenen Tür freigegeben werden soll, aber Sie sind nicht da. Auch für Backups, die einmalig in einer bestimmten Nacht laufen sollen, lohnt sich die Nutzung eines "at-Jobs".

Um einen solchen Job anzulegen, können Sie sich zweier Möglichkeiten bedienen: Entweder schreiben Sie die Befehle in eine Datei, oder Sie geben die Liste der Befehle von Hand ein. Den Job selbst tragen Sie mit dem Befehl "at" und der Angabe des Zeitpunkts ein. Für die Beschreibung des Zeitpunkts gibt es wiederum viele Möglichkeiten, gemeinsam ist nur, dass die Zeitangabe am Anfang stehen muss.. Für das erste Beispiel nehmen wir an, dass heute abend um 22:30 Uhr ein Mailaustausch erfolgen soll. Der entsprechende Befehl steht in der Datei /root/mail-befehl :

root@Arktur:~# at 22:30 /root/mail-befehl
job 1 at 2002-02-24 22:30

Die zweite Zeile stellt die Antwort des Servers dar.

Im zweiten Beispiel soll am 25.03.2002 um 7.30 Uhr das Internet über den Provider "t-online" geöffnet werden. Da keine Befehlsdatei existiert, soll der Befehl direkt eingegeben werden:

root@Arktur:~# at 7:30 25.03.02
warning: commands will be executed using /bin/sh
at> /etc/ppp/inet-on t-online
at> <EOT>
job 2 at 2002-03-25 07:30

Es können mehrere Befehle nacheinander eingegeben werden. Nach der Eingabe des letzten Befehls muss mit der Tastenkombination [STRG] + [D] die Eingabe beendet werden. Statt des Datums kann die Zeitangabe auch relativ erfolgen. Statt übermorgen,um 12:30 Uhr kann man als Befehl schreiben:

at 12:30 + 2 days

Die eingegebenen Jobs werden in einer Warteschlange gespeichert. Außer root dürfen auch alle anderen Nutzer solche Jobs anlegen, außer den in der /etc/at.deny aufgelisteten Nutzern. Von den Nutzern angegebene at-Jobs werden auch nur mit deren Benutzerrechten ausgeführt.

Damit der Job auch gestartet wird, muss der Daemon "atd" gestartet sein. Da Arktur auch beim Schließen der Internet-Verbindung nach der eingetragenen Zeit den at-Daemon nutzt, sollten Sie diesen Dienst nicht deaktivieren. Wollen Sie die eingetragenen Jobs sehen, hilft der Befehl "atq":

root@Arktur:~# atq
1 2002-02-24 22:30 a root
2 2002-03-25 07:30 a root

Wir finden also die beiden aktivierten Jobs in der Liste. Wollen Sie einen Job wieder entfernen, hilft der Befehl "atrm" gefolgt von der Jobnummer. Der Superuser root darf jeden at-Job löschen, die anderen Nutzer nur ihre eigenen Jobs.

b) periodisch sich wiederholende Jobs mit "cron"

Vielfach sollen aber sich wiederholende Jobs ausgeführt werden. Dafür sorgt der Daemon "cron", der ebenfalls beim Systemstart aktiviert wird und der wichtige Aufgaben im Server übernimmt. Eine Reihe von Aufträgen hat dieser Daemon schon bekommen, die Sie bei der Bearbeitung der Tabellen nicht entfernen sollten. Vielmehr ist es meist wünschenswert, die Aufgaben zu erweitern.

Grundsätzlich kann jeder Nutzer von Arktur solche Auftragstabellen erstellen. Die Aufträge werden dann mit den Rechten und der Umgebung dieses Nutzers durchgeführt. Erzeugt der Job Ausgaben, werden die an den Auftraggeber per E-Mail zugestellt. Im Dateisystem von Arktur finden Sie die Tabellen als Dateien mit dem Namen des Nutzers im Verzeichnis /var/spool/cron/tabs. Mit der Datei /var/spool/cron/deny können Sie einzelnen Nutzern das Recht entziehen, solche Cron-Tabellen anzulegen. Achtung! Bearbeiten Sie nicht die Tabellen direkt im Verzeichnis. Der Daemon wird sonst nicht über die Änderungen informiert, und die Jobs laufen unverändert weiter.

Schauen wir uns die Tabelle von root einmal an. Nutzen Sie als root den Befehl "crontab -l" (l für list), und Sie erhalten:


-*/15 * * * *   /usr/lib/ods-server/cron/job.OFT < /dev/null
10 2 * * *           /usr/lib/ods-server/cron/job.TAG < /dev/null
10 3 * * sun         /usr/lib/ods-server/cron/job.WOCHE < /dev/null
10 4 1 * *           /usr/lib/ods-server/cron/job.MONAT < /dev/null
10 5 1 feb,aug *     /usr/lib/ods-server/cron/job.HALBJAHR < /dev/null
30 20,5 * * *        /etc/ppp/inet-off  > /dev/null

Abbildung 7.10-1: Die Crontab für root

Die meisten dieser Einträge finden Sie als "sysadm"-Jobs, zu sehen per

	crontab -l -u sysadm

Die Tabelle besteht virtuell aus sechs Spalten, die nicht direkt untereinander stehen müssen. Die erste Spalte steht für den (oder die) Minutenwert(e), die zweite für die Stundenwerte, die dritte für den Tag des Monats, die vierte für den Monat und die fünfte für den Wochentag. Die sechste Spalte schließlich nimmt den Befehl auf, der ausgeführt werden soll.

In diesem Beispiel wird in der ersten Zeile festgelegt, dass täglich in jeder Stunde (* steht für jede beliebigen Wert, hier für jede Stunde, jeden Tag, jeden Monat und jeden Wochentag) in den Minuten alle 15 Minuten der Befehl /usr/lib/ods-server/cron/job.OFT aufgerufen wird, der zum Beispiel die Dienste des Newsservers überwacht und wenn nötig die Datenbank des NIS-Systems aktualisiert. Täglich um 2.10 Uhr wird der Befehl /usr/lib/ods-server/cron/job.TAG abgearbeitet. An jedem Sonntag (fünfte Spalte mon) um 3.10 Uhr läuft job.WOCHE ab, an jedem ersten (Spalte 3 ist 1) des Monats job.MONAT und am 1. Februar sowie 1. August läuft job.HALBJAHR (für Aufgaben, die bei Schulhalbjahr-Wechsel anfallen).

Interessant ist die letzte Zeile: Täglich um 20.30 Uhr und um 5.30Uhr wird der Internet-Zugang geschlossen. Ist in Ihrer Schule zum Beispiel eine Volkshochschule, die auch nach 20.30 Uhr das Internet nutzen will, muss dieser Job verändert werden. Nehmen wir an, der Server soll jeden Tag um 7.00 Uhr das Internet über den Provider "t-online" öffnen und statt 20.30 Uhr um 22.30 Uhr (und wie gewohnt um 5.30 Uhr) das Internet schließen. Bearbeiten Sie die Tabelle mit dem Befehl "crontab -e".

Die letzten Zeilen der Tabelle müssen dann so aussehen:


10 5 1 feb,aug *     /usr/lib/ods-server/cron/job.HALBJAHR < /dev/null
30 22,5 * * *        /etc/ppp/inet-off
00 07 * * *          /etc/ppp/inet-on t-online

Abbildung 7.10-2: Die letzten drei Zeilen der neuen Crontab

Damit wird nun das Internet um 7.00 Uhr freigegeben. Fließen dann ca. 10 Minuten lang keine Daten ins Internet, legt Arktur die Telefonleitung auf und geht in den Modus "Standby". Sobald eine Anfrage ins Internet geht, wird die Modem- oder DSL-Verbindung wieder aufgebaut und die angeforderten Seiten geholt. Auf diese Weise werden eventuell Online-Kosten gespart, aber vor allem auch die Zeit für Angriffe aus dem Internet verringert.

Wenn Sie wollen, können Sie die Tabelle um weitere Befehle erweitern. Löschen Sie dabei bitte nicht die schon vorhandenen Einträge heraus, sonst werden wichtige Jobs nachts nicht mehr ausgeführt und letztlich die Funktion des Servers beeinträchtigt.

Viele weitere Cronjobs werden zu Zeiten, die in "/etc/crontab" definiert sind, ausgeführt; sie sind in den Verzeichnissen "/etc/cron.daily" usw. aufgeführt.
Sie haben keinen "owner"; damit haben sie u.a. auch kein Homeverzeichnis, aus dem sie bestimmte Parameter holen könnten.


Vorheriger Abschnitt Inhaltsverzeichnis Nächster Abschnitt

© Reiner Klaproth, 04.03.2002


Diese Seite dokumentiert den c't/ODS-Schulserver, insbesondere die Dateien in den Verzeichnissen "/slack/ods1" und "slack/ods9" auf der Installations-CD (oder der zugehörigen *.iso-Datei).
Die o.g. Dateien stehen unter der GNU Public License GPLv2, dementsprechend steht auch diese Dokumentation unter der GPL.
© Arktur-Team 2004,2005,2006,2007,2008