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:
| Minute | Stunde | Tag / Monat | Monat | Wochentag | Bedeutung |
|---|---|---|---|---|---|
| * | * | * | * | * | Jede Minute, rund um die Uhr, sieben Tage die Woche |
| 0 | 0 | * | * | * | Täglich null Uhr |
| 5 | * | * | * | * | Fünf Minuten nach jeder vollen Stunde |
| */5 | * | * | * | * | Alle 5 Minuten |
| 59 | 23 | * | * | 0 | Jeden Sonntag (Sonntag kann als 0 oder 7 geschrieben werden) um 23:59 Uhr |
| 20,30 | 1 | * | * | 1-5 | Montags bis freitags jeweils um 01:20 und 01:30 Uhr |
| 0 | 1 | 1-7 | 12 | 1 | ACHTUNG: 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:
| String | Bedeutung | cron-Schreibweise |
@reboot | einmalig, beim Start | |
@daily | einmal pro Tag | 0 0 * * * |
@midnight | einmal pro Tag | 0 0 * * * |
@hourly | einmal pro Stunde | 0 * * * * |
@weekly | einmal pro Woche | 0 0 * * 0 |
@monthly | einmal im Monat | 0 0 1 * * |
@annually | einmal im Jahr | 0 0 1 1 * |
@yearly | einmal 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:
1 | 30 0 * * * curl http://website.xy/task.php |
STARTET ZU JEDER VOLLEN STUNDE EINEN ZEITABGLEICH MIT EINEM TIMESERVER:
1 | 0 * * * * /usr/sbin/ntpdate timeserver.com |
SENDET JEDE MINUTE EINEN PING:
1 | * * * * * 8.8.8.8 |
FÜHRT JEDEN FREITAG UM 23:50 EIN SHELL-SCRIPT AUS:
1 | 23 50 * * 5 /root/script.sh |
STARTET JEDES JAHR AM 01.01. EINEN ZEITABGLEICH MIT EINEM TIMESERVER:
1 | 0 1 1 1 * /usr/sbin/ntpdate timeserver.com |
TASK ALLE 3 STUNDEN AUSFÜHREN LASSEN:
1 | 0 */3 * * * /root/script.sh |
TASK ALLE 15 MINUTEN AUSFÜHREN LASSEN:
1 | */15 * * * * /root/backup.sh |
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:
1 | */15 * * * * /root/backup.sh >> /root/backup.log |
E-Mail Benachrichtigungen für Cronjobs kann man über folgende Variable am Anfang der Cronjob-Datei aktivieren oder deaktivieren:
1 2 | MAILTO="" # Schickt keine E-Mail bei Ausführung der Cronjobs MAILTO="email@email.email" # Würde eine E-Mail senden bei Ausführung der Cronjobs |
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 + G | F1 | Vollständige Liste der Tastenkürzel (M („Meta“) mit Alt oder Alt + ⇧ aufrufbar.) Hilfe anzeigen |
| Strg + X | F2 | Datei schließen |
| Strg + O | F3 | Datei speichern |
| Strg + W | F6 | Suche |
| Alt + W | F16 | Weitersuchen |
| Alt + R | Strg + Alt Gr + ß | Suchen/Ersetzen |
| Alt + ⇧ + Strg | Alt + 6 | Zeile (oder Markierung) in Zwischenablage kopieren |
| Strg + K | F9 | Zeile (oder Markierung) ausschneiden und in Zwischenablage kopieren |
| Strg + U | F10 | Inhalt der Zwischenablage einfügen |
| Alt + A | Strg + 6 | Markierung beginnen/ Markierung aufheben |
| Strg + A | Pos1 | Zum Zeilenanfang gehen |
| Strg + E | Ende | Zum Zeilenende gehen |
| Alt + Alt Gr + < | Alt + Alt Gr + ß | Zum Dateianfang gehen |
| Alt + ⇧ + 7 | Alt + ⇧ + ß | Zum Dateiende gehen |
| Alt + G | Strg + ⇧ + – | 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 | |
