Einmal angeordnet und immer wieder ausgeführt – Linux-User haben verschiedene Möglichkeiten, sich Arbeit durch Automatisierung zu ersparen.
Wussten Sie schon, dass Linux Ihre Faulheit unterstützt? Solange Ihr Rechner läuft, kann er viele Dinge erledigen, ohne dass Sie dabeisitzen müssen. Sie sagen ihm, wann er was tun soll und brauchen sich nun nicht mehr darum kümmern.
Einmal ausführen, bitte
Für Arbeiten, die nur einmal zu einer bestimmten Zeit ausgeführt werden müssen, stellt Linux den at-Befehl zur Verfügung. Wollen Sie zum Beispiel des Nachts den Inhalt eines MP3-Verzeichnisses in wav-Dateien umwandeln, um davon am nächsten Tag eine Audio-CD zu brennen, schreiben Sie ein kleines Skript, das die Konvertierung erledigt:
#!/bin/shfor file in @L: *.mp3 do mpg123 -w "$file.wav" "$file" done
for Laufvariable Liste do [verschiedene Befehle] done
Im Beispiel wird der mpg123-Befehl für jede Datei im aktuellen Verzeichnis, die mit .mp3 endet, einmal aufgerufen.
Dieses speichern Sie unter dem Namen mp32wav im Verzeichnis mit den zu konvertierenden MP3-Dateien ab und machen es mit chmod a+x mp32wav ausführbar. Da die Konvertierung selbst bei kleinen MP3-Sammlungen nicht gerade schnell geht, darf der Rechner zur Schlafenszeit arbeiten:
pingi@server:~/mp3$ at 23:00 warning: commands will be executed using /bin/sh at> mp32wav at> [Strg][D]
Vorausgesetzt, der Festplattenplatz hat ausgereicht, liegen die wav-Dateien zum Frühstück einträchtig neben den MP3-Originalen. Soll das Skript hingegen erst in drei Tagen um 23 Uhr starten, weil Sie in der Zwischenzeit ein paar Spätschichten am Rechner einlegen wollen, drücken Sie diesen Wunsch so aus:
pingi@server:~/mp3$ at 23:00 + 3 days at> mp32wav at> [Strg][D]
Dass der Rechner an diesem Tag um diese Uhrzeit eingeschaltet sein muss, versteht sich dabei von selbst. Sie erhalten auch automatisch eine Mail über die Ausführung Ihres Wunsches – vorausgesetzt, Sie haben einen lokalen Mail-Server installiert. Die Mail geht immer an den User, der den at-Auftrag erteilt hat.
Wer wissen will, was at so alles auszuführen plant, bekommt von atq Auskunft. Während ein normaler User lediglich erfährt, was ihm die Zukunft bringt, bekommt root Einsicht in alle offenen Jobs:
root@server:~# atq 2 2002-04-13 23:00 a pingi
Überlegt man es sich in der Zwischenzeit anders, löscht atrm Jobnummer den Auftrag wieder:
pingi@server:~$ atrm 2
Eine auf modernen Workstation-PCs sehr selten benötigte Unterart des at-Kommandos ist der batch-Befehl. Dieser wirkt wie at, mit dem einzigen Unterschied, dass er das Kommando erst startet, wenn die Auslastung des Systems eine gewisse Grenze (load average < 0.8) unterschritten hat. Arbeitet man beispielsweise an einem tagsüber stark ausgelasteten Server, wartet der Batch-Befehl, bis die Mitarbeiter Feierabend gemacht haben:
pingi@server:~/mp3$ batch -m at> mp32wav at> [Strg][D] job 8 at 2002-04-13 14:32
Die Option -m (“mail”), die sich auch mit at verwenden lässt, bewirkt dabei, dass auch dann eine Erfolgsmail verschickt wird, wenn das abzuarbeitende Kommando selbst keine Ausgaben auf der Standardausgabe macht.
Auch die mit batch auf die Ausführung wartenden Kommandos kann man sich mit atq ansehen und mit atrm löschen.
pingi@server:~$ uptime 2:05pm up 8:52, 4 user, load average: 0.62, 0.35, 0.22
Er gibt die Systemzeit, die Zeit seit dem letzten Start, die Anzahl der angemeldeten User sowie die durchschnittliche Systemauslastung der letzten Minute, der letzten fünf Minuten und der letzten Viertelstunde an.
Mit schöner Regelmäßigkeit
Sollen Aufgaben regelmäßig durchgeführt werden, arten die vielen at-Aufrufe in Fleißarbeit aus. Das ist sicher nicht im Sinne eines Linux-Users, weshalb mit dem Cron-Daemon [1] ein Programm zur Verfügung steht, das sich auf diese Aufgabe spezialisiert hat.
Am einfachsten erstellt man die entsprechende Auftragstabelle, die Crontab, mit einem grafischen Hilfstool [3]. Unter KDE kann man dafür kcron verwenden (Abbildung 1). Damit erzeugt man einen neuen Eintrag mit Bearbeiten / Neu (Abbildung 2).
Damit wir auch später noch wissen, worum es geht, geben wir dem Ganzen im Kommentarfeld einen Namen und tragen bei Programm das aufzurufende Kommando ein. Jetzt wird mit Hilfe der verschiedenen Zeit-Knöpfe noch festgelegt, zu welchen Daten und Zeiten der Cron-Job gestartet werden soll. Mit OK kommt man wieder zurück zum Hauptfenster. Datei / Speichern tut leider nicht in allen kcron-Versionen das Erwartete (bei KDE 3.0 schon), aber spätestens beim Schließen des Programms kann man die Übertragung der angezeigten Aufgaben an den Cron-Daemon problemlos nachholen.
Wem das Drücken vieler Knöpfe zu umständlich erscheint, benutzt statt eines GUI-Tools nach alter Tradition ein Kommandozeilen-Programm. crontab -l gibt die Liste der aktuellen Einträge aus – Listing 1 zeigt ein Beispiel.
Listing 1
Eine persönliche Cron-Tabelle
# DO NOT EDIT THIS FILE - edit the master and reinstall. # (/tmp/crontab.999 installed on Wed Mar 27 17:29:15 2002) # (Cron version – $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $) # Countermail für Alexa 10 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 @L: * @L: * @L: * /home/schrotty/Arbeit/Mail/auswertung # Online-Auswertung 0,30 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 @L: * @L: * @L: * /home/schrotty/Arbeit/Mail/onLog.pl >/tmp/onAusw # imail 0 1,3,5,7,9,11,13,15,17,19,21,23 @L: * @L: * @L: * /home/schrotty/Arbeit/Mail/imail # This file was written by KCron. Copyright (c) 1999, Gary Meyer # Although KCron supports most crontab formats, use care when editing. # Note: Lines beginning with "#\" indicates a disabled task.
Wie auch bei Shell-Skripten leiten # am Zeilenanfang eine Bemerkung ein. Jede andere Zeile muss, durch Leerzeichen getrennt, folgende Einträge enthalten: Minuten, Stunden, Tage, Monate, Wochentage und auszuführendes Kommando. Bei der Angabe des Wochentags zählt man einfach durch: 0 steht für den Sonntag, 6 für den Samstag. Das @L: * kann als Joker verwendet werden, wenn der betreffende Eintrag egal ist. Sollen mehrere Werte gelten, sind sie durch ein Komma – ohne Leerzeichen davor oder dahinter – zu trennen. Die Online-Auswertung in Listing 1 wird also immer um 0 und 30 Minuten zu jeder Stunde an jedem Tag ausgeführt.
Wollen Sie ganz von vorn anfangen, löscht crontab -r die gesamte Crontab. crontab -e bearbeitet sie mit dem in der Umgebungsvariablen EDITOR eingestellten Standardeditor (meistens vi). Wer sich mit diesem nicht abmühen möchte, schreibt die gewünschten Aufträge mit dem Lieblingseditor entsprechend formatiert in eine ASCII-Datei und überführt diese mit crontab dateiname in die Crontab.
Fast nach Plan
Der Cron-Daemon hat den Nachteil, dass der Rechner zu den gewünschten Ausführungszeiten eingeschaltet sein muss. Aber auch dafür lässt sich Abhilfe schaffen: anacron. Sollte dieses Paket nicht bei Ihrer Distribution dabei sein, kann es unter [4] heruntergeladen werden. Die Installation erfolgt wie üblich mit
tar -xzf anacron-2.3.tar.gz cd anacron-2.3 make su make install
Die Steuerzentrale von anacron heißt /etc/anacrontab; jede Zeile in dieser von root verwalteten Konfigurationsdatei (Listing 2) entspricht einem Task. Anders als Cron spezifiziert Anacron keine exakten Zeiten, sondern in der ersten Spalte, aller wieviel Tage der in der letzten Spalte angegebene Job fällig ist. Steht der entsprechende Befehl in einem der in PATH aufgelisteten Verzeichnisse, reicht sein Name; ansonsten ist eine komplette Pfadangabe erforderlich.
Wird Anacron beim Booten des Rechners aufgerufen, schaut es in einer nach der Zeichenkette in der dritten Spalte benannten Datei nach, ob bereits entsprechend viele Tage verstrichen sind. Dieses File wird neu geschrieben, wenn Anacron einen Task ausführt. Damit nach einem Anacron-Start nicht tausende Prozesse auf einmal loslegen, wenn der Rechner zu lange ausgeschaltet war, kann man in Spalte zwei eine Verzögerung in Minuten angeben.
Listing 2
Anacron-Steuerdatei
# /etc/anacrontab-Beispiel SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin #Intervall Verzoegerung Job-Identifier Kommando 1 5 whatis makewhatis 7 15 Wochenstatistik /home/schrotty/Arbeit/Mail/stats
Sinnvollerweise startet man das Programm mit anacron -s aus einem Boot-Skript heraus. Läuft der Rechner öfters über Nacht durch, empfiehlt es sich, anacron -s in die Cron-Tabelle von root einzutragen, sofern man Wert darauf legt, einen Job wirklich annähernd mit dem angegebenen Intervall zu wiederholen.
Glossar
-
for-Schleife
-
Die for-Schleife ist eine einfache Zählschleife, die so lange durchlaufen wird, wie die Laufvariable in den vorgegebenen Grenzen liegt. Sie hat in der Bash die allgemeine Form
-
$
-
Will man den Inhalt einer Variablen in der Bash erfragen, stellt man den $-Operator vor ihren Namen. Im Beispiel wird so aus dem Inhalt von file und der Zeichenkette “.wav” der Name der zu erzeugenden Wave-Datei gebildet.
-
load average
-
Die durchschnittliche Auslastung des Systems (load average) kann man sich mit dem Befehl uptime ansehen:
Infos
[1] Patricia Jung: “Wem die Stunde schlägt”, Linux-Magazin 08/1998, http://www.linux-magazin.de/ausgabe/1998/08/Cron/cron.html
[2] Patricia Jung: “Diener auf die Minute”, LinuxUser 12/2000, http://www.linux-user.de/ausgabe/2000/12/080-cron/cron-1.html
[3] Patricia Jung: “Auftragsersteller vom Dienst”, LinuxUser 01/2001, http://www.linux-user.de/ausgabe/2001/01/077-crontabmanager/crontabmanager.html
[4] Anacron: http://software.linux.com/projects/anacron/






