Kategorieauswahl

Unter Linux Aufgaben zeitgesteuert durchführen

Es gibt 3 Möglichkeiten etwas zu einer bestimmten Uhrzeit oder einem bestimmten Datum unter Linux ausführen zu lassen. Dies sind cron, anacron und at.

  • Cron führt Aufgaben zu einem bestimmten Zeitpunkt wiederkehrend aus.
  • Anacron macht das Gleiche mit dem kleinen aber feinen Unterschied, dass Jobs (Aufgaben) bei ausgeschaltetem PC nachgeholt werden sobald der PC wieder eingeschaltet ist. Bei cron fällt ein Job bei ausgeschaltetem PC einfach unter den Tisch.
  • At hingegen macht den Job zu einem bestimmten Zeitpunkt und fertig – keine Wiederholungen.

Für alle drei gibt es wie für andere Dämonen (Dienste) auch *.allow und *.deny (Beispiel: cron.deny) im /etc Verzeichnis. Dort trägt man Benutzer oder Gruppen ein die den Dienst entweder explizit nutzen (allow) oder eben nicht benutzen (deny) dürfen. Ich kann also einer Gruppe von Benutzern erlauben (allow) den Dienst zu verwenden, aber einen Benutzer aus der Gruppe (deny) explizit ausschließen.

Cron

Für cron gibt es die Datei /etc/crontab mit diesem Aufbau:

Minuten Stunden Tage Monate Wochentag Benutzer Befehl

Beispiel: 30 6 * * 1-5 root script.sh

Dieser Eintrag würde während der Woche (1-5 in Spalte 5: Montag=1,Dienstag=2…Freitag=5), aber nicht am Wochenende ein Script Namens script.sh als Benutzer root jeden Morgen um 6:30 Uhr unabhängig (wegen dem * in Spalte 3 und 4) vom Datum (Tag oder Monat) ausführen. Um etwas 1/4 stündlich ausführen zu lassen wären auch die folgenden beiden Einträge machbar:

0,15,30,45 * * * * root script.sh

*/4 * * * * root script.sh

Selbstverständlich braucht der angegebene Benutzer auch das ausführen Recht auf die angegebene Datei.

Bei den meisten heutigen Distributionen gibt es bereits Verzeichnisse wie cron.daily oder cron.hourly usw. in /etc. Da braucht man nur noch sein Script rein zu kopieren ohne dass man mit cron groß rumkonfiguriert.

Normal sterbliche Benutzer (nicht root) selbst haben auch ohne Zugriff auf diese Dateien die Möglichkeit cron zu nutzen. Dafür gibt es das Verzeichnis /var/spool/cron/tabs/Benutzer wo jeder seine eigenen Cronjos basteln kann. Alternativ kann man auch das command crontab verwenden um die Jobs anzulegen.

Anacron

Für anacron gibt es die Datei /etc/anacrontab (bei SuSE sucht man dies vergeblich – kann man nur von Sourceforge als Quellcode kompilieren und installieren).

Beispiel: 7 5 Name script.sh

Das script namens script.sh wird alle 7 Tage ausgeführt. Die 5 bedeutet, dass der Job wenn er fällig ist (seit 7 Tagen nicht gelaufen) um 5 Minuten verzögert wird. Stellen Sie sich vor der PC war einen Monat aus und nun starten 50 Jobs auf einmal. Daher sollte man die Jobs mit unterschiedlichen Verzögerungsintervallen ausstatten um den PC nach dem langen Winterschlaf nicht gleich zu überfordern. Name ist der Name unter dem der Job geführt wird und kann beliebig gewählt werden (es ist nicht der Name der Benutzers unter dem der Job ausgeführt wird wie bei cron!).

At

at ist etwas seltsam in der Verwendung, aber trotzdem ganz brauchbar.

Beispiel: echo ’shutdown -h -t min 2′ | at 12:00

Um 12:00 Uhr wird der Befehl shutdown (muss in ein echo verpackt und per Pipe übergeben werden) ausgeführt. shutdown wiederum ist durch den Parameter -t min 2 angewiesen noch 2 Minuten zu warten. Also wird der Computer bei diesem Befehl um 12:02 Uhr heruntergefahren. Wenn Sie längere Romane an Befehlen schreiben möchten können Sie auch wie folgt vorgehen:

at 12:00 2011-11-23 << EOF

echo „Happy Birthday“ | wall

EOF

Am 23.11.2011 um 12:00 Uhr würde ich also den PC veranlassen mir zum Geburtstag zu gratulieren. Zugegeben, das Beispiel wäre besser für cron oder anacron geeignet, da es sich (hoffentlich 😉 um ein wiederkehrendes Ereignis handelt.

Anregungen und Kommentare erwünscht