<!--#include file="head.html" -->

<p class=title>
<a href=1.111.html>
<img src=../images/lpi-pengu.png border=0 alt="Zurück">
</a>
<h1>1.111.4</h1>
<h1>Automatisieren von Systemadministrationsaufgaben durch Planen von
zukünftig laufenden Jobs</h1>
<p><hr><p>
<b>Beschreibung:</b>
Prüfungskandidaten sollten in der Lage sein, <b>cron</b> oder <b>anacron</b> 
zu verwenden,
um Prozesse in regelmäßigen Intervallen ausführen zu lassen, und <b>at</b> zu
benutzen, um Jobs zu einer bestimmten Zeit auszuführen. Dies beinhaltet das
Verwalten von <b>cron</b> und <b>at</b> Jobs und die Konfiguration von Benutzerzugang zu
<b>cron</b> und <b>at</b> Diensten. 
<p>
Die wichtigsten Dateien, Bezeichnungen und Anwendungen: 
<p><ul>
<li><b>at</b>
<li><b>atq</b>
<li><b>atrm</b>
<li><b>crontab</b>
<li><tt>/etc/anacrontab</tt>
<li><tt>/etc/at.deny</tt>
<li><tt>/etc/at.allow</tt>
<li><tt>/etc/crontab</tt>
<li><tt>/etc/cron.allow</tt>
<li><tt>/etc/cron.deny</tt>
<li><tt>/var/spool/cron/*</tt>
</ul>
<p><hr><p>

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 <a href=../manpages/cron.html><b>cron</b>-Daemon</a>. Er kann auf 
verschiedene Weisen konfiguriert
werden, die hier genauer beschrieben werden sollen.
<p>
Manche Aufgaben sind aber nicht regelmäßig auszuführen, sondern nur genau
einmal, aber zu einem ganz bestimmten Zeitpunkt. Diese Aufgabe wird vom
<b>at</b>-Daemon gelöst, der genau dazu gemacht ist.
<p>
<h3>Der cron-Daemon und seine Konfiguration</h3>
Der <a href=../manpages/cron.html>Cron-Daemon</a> überwacht verschiedene Dateien 
und Verzeichnisse, in denen Anweisungen liegen, die in regelmäßigen
Abständen ausgeführt werden sollen. Diese Anweisungen werden Cron-Tabellen
oder eben <b>crontabs</b> genannt.
<p>
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.
<p>
Es gibt also mehrere Möglichkeiten, dem Cron-Daemon einen Job zur Ausführung
zu übergeben. Die einzelnen Möglichkeiten sind:
<p>
<dl>
<dt><b>User-Crontabs</b>
<dd>Jeder User des Systems kann eine eigene Crontab (also eine Datei mit
Anweisungen für Cron) erstellen und bearbeiten. Die Jobs, die darin
aufgeführt sind werden von Cron unter der Userkennung des Users ausgeführt,
um dessen Crontab-Datei es sich handelt. Die User-Crontabs werden nicht
direkt mit einem Editor verändert, sondern mit dem Befehl <a
href=../manpages/crontab_1.html>crontab(1)</a>. 
<p>
<dt><b>Systemweite Crontab-Datei</b>
<dd>Im Verzeichnis /etc existiert eine Datei <tt>crontab</tt>, die ebenfalls
Cronjobs definiert. Das Format dieser Datei unterscheidet sich etwas von dem
der Usercrontabs - siehe weiter unten...
<p>
<dt><b>cron.d Verzeichnis</b>
<dd>Im Verzeichnis /etc kann ein Verzeichnis cron.d existieren, das Dateien
im selben Format wie /etc/crontab enthalten darf. Auch diese Dateien werden
von cron überwacht und darin enthaltene Befehle werden ausgeführt.
<p>
<dt><b>cron.{hourly,daily,weekly,monthly} Verzeichnisse</b>
<dd>Ebenfalls im /etc/verzeichnis können Verzeichnisse der Namen
cron.hourly, cron.daily, cron.weekly und cron.monthly existieren. Diese
Verzeichnisse enthalten <b>nicht</b> crontabs, sondern Shellscripts, die
entsprechend stündlich, täglich, wöchentlich oder monatlich ausgeführt
werden.
</dl>
<p>
<h4>Das Format der User-Crontabs</h4>
Das Format der Crontabs der User ist etwas speziell, hier das Grundprinzip:
Crontab-Einträge sind entweder Definitionen von Shellvariablen oder
zeitgesteuerte Cron-Befehle. Leere Zeilen oder Zeilen, die mit einem #
beginnen werden ignoriert. Das Kommentarzeichen (<tt>#</tt>) darf aber nur
am Anfang der Zeile stehen mitten in einer Zeile wird es als Teil des
Kommandos interpretiert. Die Definition einer Shellvariable hat immer die
Form:
<pre>
  <i>Name</i>=<i>Wert</i>
</pre>
Einige Variablen werden von Cron selbst gesetzt. <tt>SHELL</tt> wird auf
<tt>/bin/sh</tt> gesetzt, <tt>HOME</tt> und <tt>LOGNAME</tt> werden den
Informationen über den User aus der /etc/passwd entnommen. Die Variablen
<tt>SHELL</tt> und <tt>HOME</tt> dürfen verändert werden, <tt>LOGNAME</tt>
nicht.
<p>
Normalerweise schickt cron alle Ausgaben von ausgeführten Kommandos per Mail
an den User, der das Cron-Kommando ausführen liess. Die Variable
<tt>MAILTO</tt> 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 <tt>MAILTO</tt> definiert, aber leer, so
wird gar keine Mail verschickt.
<p>
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:
<pre>
<i>Minute  Stunde  Tag  Monat  Wochentag           Kommando</i>
</pre>
Die 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 (<tt>*</tt>) enthalten, das als Jokerzeichen gilt
und für jeden beliebigen Wert steht.
<p>
Die jeweiligen Zeitfelder dürfen folgende Werte aufnehmen:
<p>
<table>
<tr><th align=left>Minute</th><td>0-59</td></tr>
<tr><th align=left>Stunde</th><td>0-23</td></tr>
<tr><th align=left>Tag</th><td>0-31</td></tr>
<tr><th align=left>Monat</th><td>1-12</td></tr>
<tr><th align=left>Wochentag</th><td>0-7 (0 und 7 bedeutet Sonntag)</td></tr>
</table><p>
Auch Bereichsangabe sind erlaubt. Bereiche werden mit Bindestrich definiert. 
So würde die Angabe <tt>8-11</tt> im Stundenfeld die Stunden 8, 9, 10 
und 11 meinen.
<p>
Auch Listen sind erlaubt. Listen werden durch Kommata aufgebaut. So würde
die Angabe <tt>1,2,5</tt> im Wochentagfeld die Tage Montag, Dienstag und
Freitag meinen.
<p>
Auch Kombinationen von Listen und Bereichen sind möglich. Die Angabe
<tt>1,3,15-19,30</tt> spricht also die Zahlen 1, 3, 15, 16, 17, 18, 19 und
30 an.
<p>
Im Zusammenhang mit Bereichen können sogar Schrittweiten angegeben werden.
Die Angabe <tt>0-23/2</tt> 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 <i>alle zwei Stunden"</i>
einfach mit <tt>*/2</tt> ausgedrückt werden. Gleiches gilt für alle anderen
Zeitfelder.
<p>
Das Wochentagfeld und das Tag-Feld sind - wenn beide angegeben sind - aditiv
gemeint. Die Angabe
<pre class=file>
   * * 13 * 5       ...
</pre>
meint also nicht alle Freitag der 13., sondern alle Freitage <b>und</b> alle
13. des Monats.
<p>
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
<tt>SHELL</tt> angegebenen Shell ausgeführt. 
<p>
Eine Beispiel-Crontab könnte also folgendermaßen aussehen - mit Kommentaren
zum besseren Verständnis:
<pre class=file>
# 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 * *           bar

</pre>
Wenn 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.

<p>
<h4>User Crontabs verwalten mit crontab(1)</h4>
Die Crontabs der User sind zwar im Dateisystem als einzelne Dateien
vorhanden (/var/spool/cron/tabs/<i>Username</i>), können aber dort nicht
direkt editiert werden, weil sie nicht dem User gehören. Damit ein User
trotzdem eigene Jobs definieren kann, steht ihm das Programm <a
href=../manpages/crontab_1.html>crontab</a> zur Verfügung.
<p>
Dieses Programm erlaubt einem User, die folgenden Aktionen:
<p>
<dl>
<dt><b>Anlegen einer neuen Crontab-Datei</b>
<dd>Wenn ein User mit seinem Lieblings-Editor eine Datei erstellt hat, die
seine Crontab-Befehle im oben beschriebenen Format enthält, und der User 
bisher keine Crontab besaß oder die bisherige Crontab durch diese neue
Datei ersetzen will, dann kann er diese Datei mit dem Befehl
<pre class=shell>
  crontab <i>Dateiname</i>
</pre>  
zu seinem Crontab machen.
<p>
<dt><b>Ansehen der aktuellen Crontab</b>
<dd>
Mit dem Befehl
<pre class=shell>
  crontab -l
</pre>
kann sich ein User seine Crontab am Bildschirm anzeigen lassen.
<p>
<dt><b>Löschen der Crontab-Datei</b>
<dd>Wenn ein User seine Crontab-Datei löschen will, kann er dazu den Befehl
<pre class=shell>
  crontab -r 
</pre>
benutzen. 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.
<p>
<dt><b>Einträge in der Crontab editieren</b>
<dd>Mit dem Befehl 
<pre class=shell>
  crontab -e
</pre>
kann ein User seine Crontab-Datei editieren. Dazu wird der Editor
aufgerufen, der in der Umgebungsvariable <tt>VISUAL</tt> bzw.
<tt>EDITOR</tt> 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.
</dl>
<p>
Der Systemverwalter kann dem Programm crontab mit der Option <tt>-u
<i>username</i></tt> 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.
<p>
<h4>Das Format der Crontabs in /etc</h4>
Die Datei <tt>/etc/crontab</tt> und alle Dateien (beliebigen Namens) im
Verzeichnis <tt>/etc/cron.d</tt> werden auch als Crontabs gewertet und vom
Cron-Daemon überwacht und ausgeführt. Im Wesentlichen entspricht das Format
genau dem der User-Crontabs, mit einer Ausnahme. Zwischen dem fünften
Zeitfeld (Wochentag) und dem Befehl wird hier noch ein Username angegeben,
unter dessen ID der Befehl ausgeführt werden soll. Das Format ist also:
<pre>
<i>Minute  Stunde  Tag  Monat  Wochentag   <b>Username</b>    Kommando</i>
</pre>
Alle anderen oben genannten Eigenschaften bleiben unverändert, also auch die
Bereichs- und Listenangabe der Zeitfelder. 
<p>
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.

<p>
<h4>Die Verzeichnisse in /etc</h4>
Neben der Datei /etc/crontab und dem Verzeichnis /etc/cron.d existieren in
vielen Linux-Distributionen (RedHat, Debian, SuSE,...) auch
noch die Verzeichnisse
<pre>
/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly
</pre>
Diese Verzeichnisse enthalten <b>keine</b> 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:
<p>
<ul type=disk>
<li><b>cron.hourly</b> - Stündlich jeweils um *:30 Uhr
<li><b>cron.daily</b> - Täglich jeweils um 0:00 Uhr
<li><b>cron.weekly</b> - Wöchentlich jeweils Samstags um 0:00 Uhr
<li><b>cron.monthly</b> - Monatlich jeweils am ersten eines Monats um 0:00
Uhr
</ul>
<p>
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. 
<p>
<h4>Cron-Dienste für User erlauben oder verbieten</h4>
Normalerweise kann jeder User eines Linux-Systems seine eigene Crontab
besitzen und beliebige Aufgaben zu beliebigen Zeiten damit erledigen lassen.
Das kann er aber nur - wie oben gesehen - durch die Verwendung des Programms 
<a href=../manpages/crontab_1.html>crontab</a>. Dieses Programm bietet aber
auch eine Art Zugriffsschutz, mit dem der Systemverwalter einzelnen Usern
die Verwendung dieses Programms erlauben oder verbieten kann.
<p>
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.
<p>
Dazu kann der Systemverwalter im Verzeichnis <tt>/etc</tt> mit
zwei Dateien arbeiten, die er dort anlegen muß. Die folgenden Möglichkeiten
existieren:
<p>
Existiert die Datei <tt>/etc/cron.allow</tt>, dann dürfen nur die User
mit crontab arbeiten, die in dieser Datei aufgelistet sind.
<p>
Wenn die Datei <tt>/etc/cron.allow</tt> &nbsp;  <b>nicht</b> existiert,
stattdessen aber die Datei <tt>/etc/cron.deny</tt>, dann dürfen alle
User mit crontab arbeiten, außer denen, die in der Datei <tt>cron.deny</tt>
aufgelistet sind.
<p>
Beide Dateien sind reine Textdateien, die pro Zeile einen Usernamen
enthalten dürfen.
<p>
In älteren Versionen von Cron lagen diese beiden Dateien nicht in /etc
sondern hießen <tt>/var/spool/cron/allow</tt> und
<tt>/var/spool/cron/deny</tt>. 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.

<h3>anacron</h3>
Anacron ist wie cron ein periodischer Kommandoscheduler. Er führt bestimmte
Befehle in Intervallen aus, die aber - im Gegensatzt zu cron - nur in Tagen
angegeben werden. Der wesentliche Unterschied ist aber der, daß anacron
nicht annimmt, daß der Rechner Tag und Nacht läuft. 
<p>
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. 
<p>
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.
<p>
Jedesmal, wenn anacron aufgerufen wird, ließt es seine Konfigurationsdatei
(<a href=../manpages/anacrontab.html>/etc/anacrontab</a>) in der seine Jobs
mit den Perioden eingestellt werden. Wenn ein Job die letzten <i>n</i> Tage
nicht ausgeführt wurde, wobei <i>n</i> 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.
<p>
Anacron ist also kein Daemon, der die ganze Zeit läuft, sondern muß entweder
über init-Scripts oder cron regelmäßig gestartet werden.
<p>
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
<pre>
    Periode   Verzögerung   Job-Identifikation   Kommando
</pre>
Die 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 <tt>/etc/anacrontab</tt> Datei könnte also
folgendermaßen aussehen:
<pre class=file>
  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/*
</pre>
Jeden Tag, eine Minute nachdem anacron gestartet wurde, wird der Befehl
<b>updatedb</b> ausgeführt. Die Zeitmarke wird in eine Datei heißt ebenfalls
updatedb.
<p>
Alle 7 Tage jeweils 10 Minuten nach dem Start von anacron wird der Befehl
<b>logrotate /etc/logrotate.conf</b> ausgeführt. Die Zeitmarkendatei heißt
nur logrotate.
<p>
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.
<p>
Hat anacron all diese drei Befehle abgearbeitet, dann beendet sich das
Programm wieder.


<h3>Das at-Spoolsystem</h3>
Wenn ein Kommando nicht regelmäßig ausgeführt werden soll, sondern nur zu
einem ganz bestimmten Zeitpunkt, dann können wir das mit dem <a
href=../manpages/at.html>at-Kommando</a> erledigen. At ist ein typisches
Unix-Spoolsystem, das Aufträge entgegennimmt, in eine Warteschlange stellt
und zur gegebenen Zeit dann ausführt. Die Architektur ist wie bei allen
anderen Unix-Spoolsystemen ausgeführt:
<p>
<ul type=disk>
<li>Der Befehl <b>at</b> gibt Aufträge in die Warteschlange
<li>Der Befehl <b>atq</b> zeigt alle Aufträge, die in der Warteschlange
stehen.
<li>Der Befehl <b>atrm</b> löscht einzelne Aufträge aus der Warteschlange.
<li>Der Daemon <b>atd</b> arbeitet die Warteschlange ab. In älteren
Versionen von Linux findet sich kein eigener Daemon, in diesem Fall wurde
von cron jede Minute einmal das Programm <b>atrun</b> aufgerufen, das die
Warteschlange nach Aufträgen durchsuchte, die im Augenblick ausgeführt
werden sollten und - sofern gefunden - diese Jobs ausführte.
</ul>
<p>
Um mit <b>at</b> einen Job in Auftrag zu geben, muß einfach nur der Befehl
<pre class=shell>
  at <i>Zeit</i>
</pre>
aufgerufen werden. Danach kann über die Standard-Eingabe die gewümschte
Befehlszeile eingegeben werden, die zu der Angegebenen <i>Zeit</i>
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 <b>at</b> entweder mit
<pre class=shell>
  at <i>Zeit</i> &lt; <i>Datei</i>
</pre>
oder mit 
<pre class=shell>
  at -f <i>Datei</i> <i>Zeit</i> 
</pre>
aufgerufen werden.
<p>
Die verschiedenen Formen der Zeitangaben enthehmen Sie bitte der <a
href=../manpages/at.html>Handbuchseite</a>.
<p>
Die Ausgaben der Kommandos, die von <b>at</b> zu bestimmten Zeiten
ausgeführt wurden, werden dem User als Mail zugeschickt, der den Auftrag
losgeschickt hatte.
<p>
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
<tt>/etc/at.allow</tt> und <tt>/etc/at.deny</tt>. Existiert die Datei
/etc/at.allow, so dürfen nur die User mit <b>at</b> 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 <b>at</b> benutzen, außer den Usern,
die in at.deny aufgelistet sind. Existieren beide Dateien nicht, so darf nur
der Systemverwalter mit <b>at</b> arbeiten.   




<!--#include file="foot.html" -->
