Zum Inhalt

Cron

Cronjobs erstellen

  1. Der cronjob sollte auf dem gleichen Server eingerichtet werden, wie die Anwendung auf den er sich bezieht.
    • Damit ist keine Netzwerkkonnektivität zu einem anderen Host nötig und Brandbreite wird gespart.
    • Der cronjob ist auch wesentlich einfacher zu finden. Alles bezügliche einer Domain befindet sich auf einem einzigen Server.
  2. Sobald man als Benutzer eines Webspaces angemeldet ist können die cronjobs für diesen Benutzer mit dem Befehl crontab verwaltet werden.
    • /etc/crontab könnte durch Updates überschrieben werden
    • Es besteht üblicherweise keine Notwendigkeit die cronjobs als root auszuführen.
  3. Rufe das Skipt direkt auf, statt über eine HTTP-Anfrage an den Webserver.
    • Damit ist Authentifizierung nicht nötig.
    • Jedoch muss die Anwendung darauf ausgerichtet sein von der Kommandozeile aus aufgerufen zu werden.
    • Benutze flock aus dem Paket util-linux für länger laufende cronjobs um sicherzustellen, dass nicht mehrere Instanzen gleichzeitig laufen.
  4. Wenn es sich nicht vermeiden lässt den cronjob über den Webserver auszulösen Benutze das Programm curl.
    • lynx versucht HTML als reinen Text darzustellen, was komplette Ressourcenverschwendung ist.
    • Verwende stattdessen folgenden Befehl: curl -q -fsSLn -- "$URL" Siehe curl’s manual page für weitere Optionen.
    • Vergiss nicht Sonderzeichen wie ?&`‘” zu quoten.
  5. Passwörter sollten nicht direkt im Kommando angegeben werden.
    • Ein Kommando und damit das Passwort ist zur Laufzeit systemweit sichtbar.
    • Im Falle eines Fehlers wird das Kommando und damit das Passwort auch per Mail und damit potenziell unverschlüsselt verschickt.
    • Stattdessen sollte das Passwort aus einer Konfigurationsdatei wie \~/.netrc ausgelesen werden.
  6. Die Ausgabe eine cronjobs wird automatisch an den Besitzer des crontabs verschickt.
    • Es ist nicht nötig weitere Benachrichtigungen manuell einzuprogrammieren.
    • Um die Ausgabe an einen anderen Empfänger zu senden benutze den Befehl mail.
    • Zum debuggen kann auch die Adresse des Empfängers mit der MAILTO Variable verändert werden.
  7. Befolge die Rule of Silence, um unnötige E-Mails zu vermeiden.
    • chronic aus dem Paket moreutils kann dabei hilfreich sein.
    • Verwende Beendigungsstati aus sysexits.h um Fehler entsprechend anzuzeigen.

Cronjobs suchen

Wenn cronjobs gemäß den obigen Regeln platziert wurden sollten sie einfach zu finden sein. Benutze einfach folgenden Befehl auf dem Server, um die cronjobs des aktuellen Benutzers aufzulisten:

crontab -l

Die cronjobs eines anderen Benutzers lassen sich wie folgt auflisten:

crontab -l -u USER

Die cronjobs aller Benutzer auf einem Server lassen sich wie folgt auflisten:

awk 'NF >= 7 && !/^[ \t]*#/ { tmp = $1; $1 = $6; $6 = tmp; print $0; }' /etc/crontab; \
getent passwd | cut -d : -f 1 | while IFS= read -r user
do
    crontab -l -u "$user" | awk -v "user=$user" 'NF >= 6 && !/^[ \t]*#/ { print user, $0; }'
done 2> /dev/null

Um alle cronjobs aller Benutzer auf allen Servern aufzulisten benutze folgenden Befehl:

ansible -m raw -a '
    getent passwd |
        cut -d : -f 1 |
        xargs -n1 crontab -l -u 2\> /dev/null |
        cat -- - /etc/crontab
' all | grep "$REGEX"

Um zu prüfen wann ein cronjob das letzte mal lief benutze folgenden Befehl:

grep -i cron /var/log/syslog | less

Cronjobs bearbeiten

Die cronjobs des aktuellen Benutzers lassen sich mit folgendem Befehl bearbeiten:

crontab -e

Die cronjobs eines anderen Benutzers lassen sich mit folgendem Befehl bearbeiten:

crontab -e -u USER