18.2 Automatisierung und Routinen
Wenn Sie regemäßig zeitgesteuerte Aufgaben ausführen möchten, dann kennen Sie sicherlich den Befehl cron. Bei einmaligen Aufgaben eignet sich allerdings at wesentlich besser. Mit dem Programm können Sie das System anweisen, bestimmte Aufgaben zu vorher definierten Zeiten auszuführen. So können Sie große Kopiervorgänge (beispielsweise ein Backup) auf die Nachtstunden verlegen. Die Syntax von at bedarf allerdings einiger Erklärungen. Sie definieren eine Aktion, indem Sie zuerst at verbunden mit dem gewünschten Zeitpunkt starten:
at 23:00
at startet eine eigene Eingabeaufforderung mit einem vorangestelltem at>. In dieser Umgebung geben Sie die Befehle ein, die ausgeführt werden sollen, beispielsweise:
shutdown -h now
Dieser Befehl sorgt zu einem vorher festgelegten Zeitpunkt dafür, dass das Betriebssystem heruntergefahren wird. Dieser Befehl muss als Root ausgeführt werden, also müssen Sie der at-Umgebung ein Sudo voranstellen.
Mit atq verschaffen Sie sich einen Überblick über geplante Aktionen. Diese werden hierbei durchnummeriert, damit Sie mit Hilfe von atrm ''Prozessnummer'' einzelne geplante Aktionen wieder löschen können.
Tipp 260: Einen Zeit-Server nutzen |
Für zeitgesteuerte Befehle oder das sinnvolle Auswerten von Logfiles ist die korrekte Uhrzeit des Systems entscheidend. Um dies zu gewährleisten, lassen Sie Ihre Zeit mit einem der vielen Zeit-Server im Internet abgleichen. Dazu installieren Sie ntp und konfigurieren diesen Dienst entsprechend: |
sudo apt-get install ntp |
Die Konfiguration befindet sich in der Datei /etc/ntp.conf. Fügen Sie aus Gründen der Redundanz noch einen zweiten Zeit-Server hinzu: |
server ntp.ubuntu.com de.pool.ntp.org |
Weitere Server finden Sie unter www.pool.ntp.org/. Nach der Konfigurationsänderung müssen Sie den Dienst noch einmal neu starten |
sudo /etc/init.d/ntp restart |
und gleichen dann regelmäßig die Zeit mit den Servern im Internet ab. |
Ebenso können Sie auch zeitgesteuerte Aktionen planen. Die Zeitangaben, mit denen Sie at starten, beziehen sich immer auf den aktuellen Tag.
Wenn Sie also abends eine Aufgabe planen, die um zwei Uhr morgens starten soll, dann lautet der korrekte Befehl
at 02:00 tomorrow
oder
at 02:00 + 1 day
Außer Tagen kennt der Befehl auch Wochen, wobei Sie nicht vergessen sollten, dass Ihr Rechner dann bis zum Zeitpunkt der Ausführung des Befehls permanent eingeschaltet sein muss.
Tipp 261: Faul sein mit einem Alias |
Ein Alias bietet (wie der Name schon sagt) eine Möglichkeit, vorhandene Befehle durch neue zu ersetzen. Der Sinn erschließt sich einem sofort, wenn man oftmals einen längeren Befehl eintippen muss, zum Beispiel |
ls -laFh |
Hier ist es natürlich sehr bequem, dies durch einen kürzeren Befehl, zum Beispiel 13 zu ersetzen. Die Gefahr des Vertippens ist somit auf ein Minimum reduziert. Sie erstellen einen solchen Alias mit dem folgenden Befehl: |
alias 13='ls -laFh' |
Diesen Befehl können Sie verändern, wenn Sie den obigen Befehl wiederholen, also sozusagen den Befehl überschreiben. Möchten Sie einen alias gänzlich löschen, dann benutzen Sie den Befehl unalias: unalias 13. Eine Übersicht über alle derzeit vorhandenen alias-Befehle erhalten Sie, wenn Sie alias im Terminal eingeben. |
Cron-Jobs
Wie Sie bereits wissen, können Sie mit den Befehlen cron und at zu bestimmten Terminen Befehle ausführen. Die Tabelle für die wiederkehrende Ausführung von Befehlen kann mit
crontab -e
bearbeitet werden. Eine crontab-Tabelle sieht beispielsweise so aus:
# Verwende /bin/sh zur Ausführung
SHELL=/bin/sh
# Standardausgabe wird an 'marcus' geschickt.
MAILTO=marcus
# Min Stunde TagDesMonats Monat TagDerWoche Befehl (Komma wird 'und')
# starte um 00:05, jeden Tag
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# starte unm 14:15 am Monatsersten – Ausgabe per E-Mail an Paul
15 14 1 * * $HOME/bin/monthly
# starte um 22:00 an Werktagen (1-5), schicke E-Mail an Marcus. % für Zeilenumbruch, letztes % für cc:
0 22 * * 1-5 mail -s "Es ist 10 Uhr"
23 */2 1 2 * echo "Startet 23 Minuten nach 0 Uhr, 2 Uhr, 4 Uhr ..., am 1. Feb."
5 4 * * sun echo "Startet um 04:05 jeden Sonntag"
# Startet um 03:40 an jedem ersten Montag des Monats
40 3 1-7 * * [ "$(date +%a)" == "Mon" ] && command -args
Tipp 262: Befehl zur einmaligen Ausführung terminieren |
Um einen Befehl zur einmaligen Ausführung zu terminieren, verwenden Sie den Befehl at: |
echo '<command -args>' | at 3:40 monday |
Dieser Befehl startet einen festgelegten Prozess am Montag um 3:40 Uhr. |
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.