Montag, 15 Juli 2019 17:15

Was sind Cron-Jobs und wie kann man sie einrichten?

geschrieben von
Artikel bewerten
(0 Stimmen)

Es gibt wiederkehrende Aufgaben, die man getrost dem Server überlassen kann, weil er sie zur festgelegten Zeit viel zuverlässiger abarbeitet, ohne dass man sich weiter darum kümmern muss. Das können automatisierte Backups sein (wenn sie nicht sowie schon regelmäßig vom Provider gemacht werden), oder die regelmäßige Verschlankung von Log-Dateien, die sonst immer größer werden. Aber auch Sonderfälle wie etwa dieser hier, wo es um die Begrenzung von Bestellzeiten für einen Pizzaservice ging. All solche Aufgaben übernehmen Cron-Jobs.

Dieses Tutorial, das ich ursprünglich mal 2014 für das PrestaShop-Forum verfasst hatte (dort nicht mehr verfügbar), bietet eine Kurzanleitung zur Erstellung eines Cron-Jobs, die festlegt, zu welchen Zeiten ein Programm oder Skript ausgeführt werden soll.

Ein Cron-Job ist einfach nur eine Textzeile, die immer 6 Spalten (+ optionaler Argumente/Parameter) und den gleichen Aufbau hat: Die ersten fünf Spalten dienen der Zeitsteuerung und eine Spalte dient dem Aufruf eines Programms oder Skriptes, das ausgeführt werden soll, eventuell gefolgt von Argumenten. Alle Angaben werden durch Leerzeichen oder Tabulatoren getrennt.

Minute Stunde Jahr Monat Wochentag Skript-Pfad [Argumente]

Wichtige Cron-Jobs (z.B. die tägliche Aktualisierung des Wechselkurses sind bereits in PrestaShop vorkonfiguriert und können per Mausklicke gestartet werden, etwa der diesbezügliche in Lokalisierung -> Währungen:

http://MeinShop.de/admin-dev/cron_currency_rates.php?secure_key=c2923c9d8c87e05e2ca4fb1e0be808d3

Syntax:

Platzhalter mögliche Werte  Wildcard
Minute   0...59 * für jede Minute
Stunde  0...23 * für jede Stunde
Tag       1...31 * für jeden Tag
Monat  1...12 * für jeden Monat oder January, February, March, etc.
Wochentag  0...7 * für jeden Wochentag ( 0 und 7 adressieren den Sonntag ) oder Monday, Tuesday, Wednesday, etc.
     
Kommando        der auszuführende Befehl gefolgt von optionalen Argumenten

Die Verwendung des Symbols * zeigt an, dass der jeweilige Wert beliebig ist. Wochentage und Kalendertage schließen sich nicht gegenseitig aus, sondern werden getrennt betrachtet. Trifft also eines der beiden Kriterien zu, wird das Skript ausgeführt. Die Namen der Wochen- und Monatstage sind unabhängig von Groß- und Kleinschreibung und die ersten 3 Zeichen genügen.

Für Bereichsangaben sind folgende Separatoren erlaubt:

  • Kommata für mehrere Zeitangaben
  • Bindestrich für einen Zeitraum
  • Backslash für eine Periode

Das bedeutet, man kann also

  • Bereiche angeben, z. B. 1-4
  • die einzelnen Werte durch Komma getrennt aufzählen, z. B. 1,2,3,4
  • Schrittwerte nach dem / -Zeichen angeben.

Darüber hinaus sind folgende Alias-Namen erlaubt:

@reboot  Wird nach dem Booten ausgeführt   
@hourly  Einmal in der Stunde ~ 0 * * * *
@daily     Einmal am Tag ~ 0 0 * * *
@weekly Einmal in der Woche ~ 0 0 * * 0
@monthly Einmal im Monat ~ 0 0 1 * *
@yearly  Einmal im Jahr ~ 0 0 1 1 *


Zum Verständnis ein paar Beispiele:
 

# jeden Tag um 0:30
30 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# am ersten jeden Monats um 13:25
25 13 1 * * $HOME/bin/monthly.job
# Sonntags um 3:30
30 3 * * sun $HOME/backup.sh full
# jeden Tag 23 Minuten nach jeder geraden Stunde (0:23, 2:23, ...). 0-23 
gibt den Bereich an und /2 die Schrittweite, also von 0-23 Uhr, alle 2 Stunden.
23 0-23/2 * * * $HOME/status.sh
# Jeden Wochentag um zehn Minuten 13, 14 und 15 Uhr:
10 13-15 * * 1-5 /pfad/zum/programm
# Jedes Jahr zu Silvester:
0 0 31 12 * /usr/bin/mail.sh

 
Wichtig: Es sollten immer absolute Pfade für das Adressieren des Programms/Skripts angegeben werden.

Man kann im Cron-Job festlegen, mit welcher Shell die Skripte ausgeführt werden sollen, und wem eine E-Mail mit dem Ergebnis zugesandt werden soll:

SHELL=/bin/bash
MAILTO=admin@MeinShop.de

Wer dagegen keine E-Mail-Banchrichtigen erhalten möchte, hängt einfach folgendes an die Zeile an:

 >/dev/null 2>&1
Gelesen 3502 mal Letzte Änderung am Samstag, 28 September 2019 15:15

1 Kommentar

  • Kommentar-Link Max Dienstag, 21 Januar 2020 13:33 gepostet von Max

    Hallo,

    danke für die schöne Übersicht! Jetzt weiß zwar was ich mit Cronjobs alles machen kann, aber nicht wo ich die schönen Befehle eingeben muss. Also wohin mit dem Text? :)

    Lieben Gruß,
    Max

Schreibe einen Kommentar

Bitte achten Sie darauf, alle Felder mit einem Stern (*) auszufüllen. HTML-Code ist nicht erlaubt.

Neueste Beiträge

K2 User

uddeIM Mailbox

Sie sind nicht eingeloggt.