Crontab Beispiel

Ein cronjob auf einem Linuxsystem braucht man, um gewisse Routinen regelmässig auszuführen. Das kann bspw. ein Backup sein, welches man täglich durchführen soll. Der Befehl crontab hilft dabei.

root@blob:~# crontab -l
no crontab for root
root@blob:~#


-l die Option für “list”. Wie man sieht, sind noch keine Cronjobs definiert.

Nun kann man die Jobs nach vorgegebenem Format in ein File schreiben, bspw. erstelle ich eine Datei “jobs.backup”:

0 0 * * * /home/system/backupServerA.sh
0 1 * * * /home/system/backupServerB.sh
0 2 * * * /home/system/backupServerC.sh

Dies würde mit das Script system/backupServerA.sh um Mitternacht ausführen, die anderen analog um ein Uhr und um zwei.

Ein Crontab-File besteht aus 6 “Spalten” pro Zeile:
1 – Minuten (0-59)
2 – Stunden (0-23)
3 – Tag des Monats (1-31)
4 – Monat des Jahres (1-12)
5 – Tag der Woche (0-6, 0 ist Sonntag)
6 – Absoluter Pfad zum Script

Stern (*) ist “immer”, obiges Beispiel also jeden Tag des Monats, alle Monate, alle Tage. Man kann pro Spalte auch mehrere Werte kommagetrent aufführen:

0 1,13 * * * /home/system/backupServerB.sh

Dies führt das Script um 1 Uhr morgens und um 13:00 Uhr aus und das täglich.

Soweit sogut. Nur läuft bis jetzt noch gar nix. Um das ganze auch zu aktivieren nützt wiederum das Kommando “crontab”:

root@blob:~#crontab jobs.backup

Dies schrieb die oben definierten Jobs vom File ins “System”. Erneutes Listen der definierten Crons liefert schon einiges mehr:

root@blob:~#crontab -l
0 0 * * * /home/system/backupServerA.sh
0 1 * * * /home/system/backupServerB.sh
0 2 * * * /home/system/backupServerC.sh
root@blob:~#


Dies sind meine neuen Cronjobs und nun hoffen wir, das um die gewählte Zeit etwas geht 🙂

Weitere Hilfe dazu gibts in der Shell mit

root@blob:~#man crontab

oder

root@blob:~#man 5 crontab

oder auch mit

root@blob:~#man cron

Ein Blick hierdrauf kann auch nicht schaden:
How to Use the Cron and Crontab commands

Wünsch ich uns viel Spass damit.

27 thoughts on “Crontab Beispiel”

  1. Toll, crons innerhalb von 5 Minuten kapiert! Vielleicht noch auf Konstrukte wie “*/10 * * * * /mein/commando eingehen, das wird glaube ich viel gebraucht.

  2. Hallo, vielen Dank, es läuft super. Ohne Probleme unter RedHat 9. Sogar als Rootfile Sicherung. Top Vielen Dank

  3. Bei mir läuft es leider auch nicht! 🙁 Hab es so wie beschrieben ausgeführt. Script wird aber zu der bstimmten Zeit nicht ausgeführt! (?)

  4. Jetzt geht es! 😉 Es reicht auch nur der Eintrag in /etc/crontab! Danach den Cronjob mal neustarten, rccron restart, dann ging es! 😉 Cronjob kann, (so weit ich weiß), nicht mit Sekunden umgehen!

  5. kleiner tipp: crontab -e und man kann die crontab datei direkt bearbeiten, muss auch crontab nicht neu starten oder so… damit kann man dan ganz einfach neue crontabs erstellen, crontabs löschen oder ändern… 😉

  6. nun mit den sekunden: jain du koenntest mal folgendes versuchen: das erste feld sind ja die minuten wenn du alle 15 min was machen willst musst du da */15 eingeben –> */60 = jede minute –> */3600 = jede sekunde… ist zumindest nen versuch wert

  7. mal ne andere frage. geht auch sowas */15 19 * * * so das es alle 15 minuten während 19 uhr läuft ? sprich 19.00 19.15 19.30 19.45 ? Viele Gruesse

  8. Bei mir wollen Cronjobs beim besten Willen nicht funktionieren. Ich möchte ein PHP-Script regelmäßig aufrufen und hab per crontab -e folgende Zeile eingetragen: * * * * * root php -f /opt/lampp/htdocs/projekt/script.php Hab das ganze auch schon versucht direkt nach etc/crontab einzutragen aber ohne Erfolg. Gibts da vielleicht einfach nen
    “AN-Schalter” oder sowas?

  9. * * * * * root php -f /opt/lampp/htdocs/projekt/script.php mit 5 sternen geht das nicht. Wenn du es jede Minute machen magst gib ein */1 * * * * php…. */10 * * * * währe alle 10 Minuten also 5x pro Stunde

  10. Hallo Florian, der Eintag: * * * * * root php -f /opt/lampp/htdocs/projekt/script.php sit schon ein bisschen heavy. Heißt er doch dass dein Script jede minute in jeder stunde an jedem tag des Jahres ausgeführt wird. Ich Würde folgenden Eintrag setzen um das Script jede volle Stunde aufzurufen: 0 * * * * root php -f
    /opt/lampp/htdocs/projekt/script.php Ein crontab -l sollte nun diese Einträge zurückliefern. Wenn nicht mit rccron restart den Dämon neu starten

  11. Ich würde tippen das der Pfad zu php fehlt 🙂 */1 * * * * root /usr/bin/php -f /opt/lampp/htdocs/projekt/script.php der Benutzer steht nur in /etc/crontab sonnst ohne root

  12. Wie kann es passieren, daß die crontab für root plötzlich verschwunden ist? Ich hatte einen Job mit dem falschen Pfad eingetragen. Dass der Job nicht ausgeführt werden konnte, wurde mir in einer Mail mitgeteilt. Als ich die crontab anschließend editieren wollte, war sie weg.

  13. Mhh… ich hab auf ‘nem bezahlten Server so Crontabs, da kann ich aber nur direkt ‘nen Befehl eingeben! Wie mach ich das dort??

  14. Ich möchte eine Externe Datei alle 20 min auf meinen Server laden:
    */20 * * * * snarf http://domain.com/test.csv /var/www/vhosts/domain2.com/httpdocs

    Was mache ich falsch? es funktioniert nicht! Über Putty funktioniert der befehl snarf einwandfrei?!

  15. 1)Dakkar: Der Schwachsinn da oben mit dem “*/3600” würde es nur alle 3600 MINUTEN ausführen lassen! “/” bedeutet NICHT geteilt!!

    2) Freitag: pack den Befehl in eine Datei, und gib dann den kompletten Pfad zu Ihr in der Crontab an, dann gehts. Grund: Crontab kann keine richtigeb Befehle entgegennehmen, nur Scripts und einfache bash-funktionen wie zb. “&&” oder “||”

    3)Fabian: FALSCH! wenn etwas in /usr/bin liegt, ist es sysmtenweit verfügbar, man kann den Namen des Programms (hier: php) einfach eingeben.

    4) Noch Fragen, Hauser? 😀

  16. Was dazu noch zu sagen ist: Nach JEDER Zeile MUSS ein n (newline) stehen!
    Hatte das Problem bei mir… Der letzte Eintrag wurde einfach nicht ausgeführt – das hat mich einige Zeit und Nerven gekostet. Ich hoffe das hilft einigen 😉

  17. tha_specializt schrieb:
    Zitat:
    wenn etwas in /usr/bin liegt, ist es sysmtenweit verfügbar,
    ————————————
    Das ist nicht richtig, wenn der Pfad nicht in der Umgebeungvariable PATH enthalten ist.

    Nicht angebene Pfade sind eine der Hauptursachen, warum Cronjobs nicht laufen.
    Man kann natürlich in der Crontab die Variable setzen.

    wolle

  18. @cRaZyByTe: Herzlichen Dank, das newline zeichen (n) war es bei mir, nun läuft es!
    Einmal nach der cronjob Zeile Enter drücken im editor, et voilá!

  19. wolle … bevor du vermutest würd ich erstma ein Linux-System starten, etwas in /usr/bin legen und dann staunen. PATH ist nur für zusätzliche, eigene Pfade gedacht, /usr/bin ist immer global aufrufbar, teste es selbst. Wenn dem nämlich nicht so wäre, dann könnten Leute wie du keine Befehle wie cd, ls oder gar logout eingeben, diese liegen alle in
    /usr/bin, /usr/sbin, /usr oder ähnlichen Pfaden …. alle global

Leave a Reply

Your email address will not be published. Required fields are marked *