Cronjob unter Debian, Ubuntu und Linux Mint erstellen

Einfacher Guide mit Praxisbeispielen, wie ihr unter Debian, Ubuntu und Linux Mint ganz einfach einen Cronjob (geplanter Task) erstellen und verwalten könnt.

 

 

Bereits erstellte Cronjobs anzeigen lassen

Mit folgendem Befehl könnt ihr bereits erstellte Cronjobs anzeigen lassen

 
crontab-l

no crontab for root

Wenn ihr als root eingeloggt seid, könnt ihr die Cronjobs von jedem User anzeigen lassen:

 
crontab-u user1 -l

 

 

Neuen Cronjob erstellen und die Syntax verstehen

Folgender Befehl öffnet uns das Cronjob File mit dem Standardeditor

 
crontab-e

Wenn noch kein Task erstellt wurde steht in der Datei lediglich eine Zeile mit der Kurzform, was die einzelnen Spalten bedeuten.

 
# m h dom    mon dow    command

Ein Cronjob setzt sich daher aus folgender Syntax zusammen:

Jeder Stern oder jede Zahl wird durch ein Leerzeichen getrennt und anschließend folgt der Befehl.

CRONJOB SYNTAX:

MinuteStundeTag / MonatMonatWochentagBedeutung
*****Jede Minute, rund um die Uhr, sieben Tage die Woche
00***Täglich null Uhr
5****Fünf Minuten nach jeder vollen Stunde
*/5****Alle 5 Minuten
5923**0Jeden Sonntag (Sonntag kann als 0 oder 7 geschrieben werden) um 23:59 Uhr
20,301**1-5Montags bis freitags jeweils um 01:20 und 01:30 Uhr
011-7121ACHTUNG: Nicht “jeden ersten Montag im Dezember”, sondern “1. bis 7. Dezember UND jeden Montag im Dezember”. da hier der Sonderfall greift, dass nur entweder der Tag des Monats ODER der Tag der Woche übereinstimmen muss (siehe oben).

Jeder Stern bzw. jeder Wert kann durch einen Tabulator oder ein Leerzeichen getrennt werden.

 

Zur Vereinfachung können die ersten fünf Felder auch durch eine einzelne Zeichenkette ersetzt werden. Hierfür sind acht Schlüsselwörter definiert:

StringBedeutungcron-Schreibweise
@rebooteinmalig, beim Start 
@dailyeinmal pro Tag
0 0 * * *
@midnighteinmal pro Tag
0 0 * * *
@hourlyeinmal pro Stunde
0 * * * *
@weeklyeinmal pro Woche
0 0 * * 0
@monthlyeinmal im Monat
0 0 1 * *
@annuallyeinmal im Jahr
0 0 1 1 *
@yearlyeinmal im Jahr
0 0 1 1 *

 

 

Cron-Tabelle des Benutzers Root

Natürlich kann auch root eine Crontab anlegen. Alle Cronjobs, die in dieser Tabelle stehen, werden mit Root-Rechten ausgeführt:

sudo crontab -e

 

WEITERE CRONJOB-BEISPIELE:

JEDEN TAG UM 00:30 WIRD EINE URL PER CURL AUFGERUFEN:

STARTET ZU JEDER VOLLEN STUNDE EINEN ZEITABGLEICH MIT EINEM TIMESERVER:

SENDET JEDE MINUTE EINEN PING:

FÜHRT JEDEN FREITAG UM 23:50 EIN SHELL-SCRIPT AUS:

STARTET JEDES JAHR AM 01.01. EINEN ZEITABGLEICH MIT EINEM TIMESERVER:

TASK ALLE 3 STUNDEN AUSFÜHREN LASSEN:

TASK ALLE 15 MINUTEN AUSFÜHREN LASSEN:

Da diverse Scripte auch Meldungen auf StdOut oder StdErr ausgeben gibt es natürlich auch eine Möglichkeit, diese Meldungen in eine Log-Datei umzuleiten.

Befehl der die Log-Datei ständig erweitert. Ein Pfeil würde die Datei immer neu schreiben:

E-Mail Benachrichtigungen für Cronjobs kann man über folgende Variable am Anfang der Cronjob-Datei aktivieren oder deaktivieren:

 

Beispiele aus der Praxis und genaue Erläuterung

Ruft jeden Tag um 00:30 ein PHPSkript von einer URL auf:

 
30 0 * * * /usr/bin/curlhttp://www.domain.com/php_jobs/sql_job.php

Startet zu jeder vollen Stunde einen Zeitabgleich mit einem Zeitserver:

 
0 * * * * /usr/sbin/ntpdatezeit.domain.com

Führt jede Minute den Ping Befehl aus:

 
* * * * * /bin/ping192.168.1.1

Startet jedenSamstag um 22:10 ein lokales Shellskript:

 
10 22 * * 6 /usr/src/dump.sh

Führt jeden 10. des Monats um 23:45 einen mysqldump aller Datenbanken aus:

 
45 23 10 * * /usr/bin/mysqldump-uroot -ppassword --opt --all-databases > /usr/src/dump.sql

Startet jedes Jahr am 1.1. (Neujahr) um 01:00 einen Zeitabgleich mit einenem Zeitserver:

 
0 1 1 1 * /usr/sbin/ntpdatezeit.domain.com

Geteilte Cronjobs (alle x Mintuten, alle x Stunden,…)

Cronjobs sind in ihrer Ausführung sehr flexibel, und so können die Werte auch entsprechend aufgeteilt werden, um einen Cronjob alle x Minuten oder alle x Stunden ausführen zu lassen. Realisiert wird der Befehl durch einen / (Slash). Anhand folgender Beispiele wird der Vorgang verdeutlicht:

Cronjob alle 2 Stunden zu jeder vollen Stunde ausführen:

 
0 */2* * * /usr/bin/backup.sh

Cronjob alle 10 Minuten ausführen:

 
*/10* * * * /usr/bin/backup.sh

 

Die Cronjobs werden typischerweise unter

/var/spool/cron/crontabs/

abgelegt. Ist praktisch wenn man als root zum Beispiel schnell mal mit vi drüber schauen oder ändern möchte.

 

 

 

 

Unter https://crontab.guru oder http://corntab.com/ oder https://www.bennetrichter.de/tools/crontab-generator/ kann man sich cronjobs erstellen lassen.

 

 


sudo crontab -e 
0 0 1 * * sudo apt-get autoremove && sudo apt-get clean && sudo apt-get -y autoclean
5 15 * * 1-5sudo du -sh /var/cache/apt

 

Tastenkürzel GNU nano Editor

Tastenkürzel (Liste unvollständig)
Tasten
(beide Spalten sind gleichwertig)
Aktion
Strg + GF1Vollständige Liste der Tastenkürzel (M („Meta“) mit Alt oder Alt +  aufrufbar.) Hilfe anzeigen
Strg + XF2Datei schließen
Strg + OF3Datei speichern
Strg + WF6Suche
Alt + WF16Weitersuchen
Alt + RStrg + Alt Gr + ßSuchen/Ersetzen
 
Alt +  + StrgAlt + 6Zeile (oder Markierung) in Zwischenablage kopieren
Strg + KF9Zeile (oder Markierung) ausschneiden und in Zwischenablage kopieren
Strg + UF10Inhalt der Zwischenablage einfügen
Alt + AStrg + 6Markierung beginnen/ Markierung aufheben
Strg + APos1Zum Zeilenanfang gehen
Strg + EEndeZum Zeilenende gehen
Alt + Alt Gr + <Alt + Alt Gr + ßZum Dateianfang gehen
Alt +  + 7Alt +  + ßZum Dateiende gehen
Alt + GStrg +  + Zu einer bestimmten Zeile springen
 
Alt + D Dateistatistiken anzeigen
Strg + C Aktuelle Cursorposition anzeigen
Alt + C Aktuelle Cursorposition ständig anzeigen ein/aus
Alt + X Hilfezeilen anzeigen ein/aus
Alt + O Leerzeile unterhalb der Titelzeile ein/aus
Alt + Y Syntaxhervorhebung ein/aus