Automatisierung

Manchmal schreibst du ein Bash-Skript das etwas für dich tut, du möchtest allerdings, dass dies regelmäßig passiert - z.B. ein Backup. Natürlich könntest du eine ad hoc Lösung schreiben, die die ganze Zeit im Hintergrund läuft und abundzu Aufgaben ausführst, allerdings können die meisten UNIX-Systeme dich hier unterstützen, denn sie kommen von Haus aus mit dem sogenannten cron deamon, welcher Aufgaben mit einer Genauigkeit von bis zu einer Minute regelmäßig ausführen kann.

Auf den meisten UNIX-Systemen läuft bereits der cron deamon, crond dieser läuft bereits ohne weiteres zutun, um dies zu überprüfen führe den folgenden Befehl aus ps aux | grep crond.

Der crontab

Die Konfigurationsdatei für den cron deamon kann man sich anzeigen lassen, indem man folgenden Befehl ausführt: crontab -l bearbeiten kann man diese Datei mit dem Befehl: crontab -e Das Zeitformat das der cron deamon nutzt hat fünf verschiedene Zeitfelder und zusätzlich dem Befehl, der ausgeführt werden soll.

Note that using an asterisk * means all and using an asterisk followed by a slash and number means every nth value. So */5 means every five. Some examples are

*/5   *    *   *   *       # Alle fünf Minuten
  0   *    *   *   *       # Jede volle Stunde
  0   9    *   *   *       # Jeden Tag um 9 Uhr
  0   9-17 *   *   *       # Jede Stunde zwischen 9:00 Uhr und 17:00 Uhr
  0   0    *   *   5       # Jeden Freitag um 00:00 Uhr
  0   0    1   */2 *       # Jeden zweiten Monat, am Monatsersten, um 00:00 Uhr

Viele weitere Beispiele für häufige crontab Zeitpläne findest du unter crontab.guru

Shell-Umgebung und Protokollierung

Ein häufiger Fallstrick beim verwenden von cron ist das es nicht die gleichen Umgebungsskripte lädt, wie es gewöhnliche Shells tun, wie z.B..bashrc, .zshrc, &c und dabei nicht die Ausgaben loggt. In Kombination mit der maximalen Frequenz von einer Minute kann es anfangs recht mühsam werden, Cronscripts zu debuggen.

To deal with the environment, make sure that you use absolute paths in all your scripts and modify your environment variables such as PATH so the script can run successfully. To simplify logging, a good recommendation is to write your crontab in a format like this

* * * * *   user  /path/to/cronscripts/every_minute.sh >> /tmp/cron_every_minute.log 2>&1

And write the script in a separate file. Remember that >> appends to the file and that 2>&1 redirects stderr to stdout (you might to want keep them separate though).

Anacron

One caveat of using cron is that if the computer is powered off or asleep when the cron script should run then it is not executed. For frequent tasks this might be fine, but if a task runs less often, you may want to ensure that it is executed. anacron works similar to cron except that the frequency is specified in days. Unlike cron, it does not assume that the machine is running continuously. Hence, it can be used on machines that aren’t running 24 hours a day, to control regular jobs as daily, weekly, and monthly jobs.

Übung

  1. Schreibe ein Skript, dass jede Minute in deinen Downloads-Ordner schaut und für jede Datei, die ein Bild ist (als Tipp schaue mal unter MIME Typen oder nutze einen RegEx, um Dateiendungen zu matchen) und diese in deinen Bilderordner verschiebt.

  2. Schreibe ein Cron-Skript, um wöchentlich nach veralteten Paketen in deinem System zu schauen und dich dazu auffordert diese zu aktualiseren oder diese automatisiert aktualisiert.


Edit this page.

Licensed under CC BY-NC-SA.