Crontab Verständnisproblem

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    Ich habe in meinem Pi, der als Webcam fungiert und Bilder von 6-21 Uhr alle 20 Minuten machen soll, folgenden Job in der Crontab stehen:

    Code
    */20 06-21 * * * cd /home/pi/ && sh takeimage.sh


    Das funktioniert soweit, nur wird das letzte Bild immer um 21:40 gemacht.
    Bedeutet die Syntax, das der Job solange ausgeführt solang die Stunde 6-21 Uhr zeigt (also von 6:00 Uhr bis 21:59)?

    Wie muß es aussehen, damit die erste Aufnahme Punkt 6 und die letzte Punkt 21 Uhr stattfindet.
    Die Zeitzone ist korrekt eingestellt und die Zeit stimmt auch, da die Zeiteinblendung im Bild (über Date-Funktion) korrekt ist.

    Danke vorab für eure Hinweise
    Gruß
    Onki

    Einmal editiert, zuletzt von onki (11. März 2014 um 10:46)

  • Hallo Turbotoni,

    so in der Art hatte ich es vermutet - Danke.
    Dann lag ich ja mit meiner Aussage nicht so falsch, das die Stunden bis xx:59 gelten.
    Dann werde ich es am WE so mal testen.

    Gruß
    Onki

    Einmal editiert, zuletzt von onki (11. März 2014 um 11:36)

  • Bitte vollständige Pfade nutzen, kein " cd /home/pi/ " sondern:

    Code
    sh /home/pi/takeimage.sh

    und auch dafür sorgen das in dem Script ganz oben der Shebang angegeben ist und die Datei ausführbar ist, dann kann man sich "sh" auch sparen, also sähe der endgültige Crontab Eintrag so aus:

    Code
    */20 06-20 * * * /home/pi/takeimage.sh


    Bezüglich Crontab und einiger Beispiele siehe auch hier: https://www.forum-raspberrypi.de/Thread-tutorial-crontab-cron-jobs
    (Forumsuche nach: crontab)

    Code
    */20 06-21 * * * cd /home/pi/ && sh takeimage.sh

    Das funktioniert soweit, nur wird das letzte Bild immer um 21:40 gemacht.
    Bedeutet die Syntax, das der Job solange ausgeführt solang die Stunde 6-21 Uhr zeigt (also von 6:00 Uhr bis 21:59)?

    Ja, die Crontab wird alle 20 Minuten und in jeder Stunde die mit 06 (oder 6), 07, 08, 09, 10, 11, 12, 13, 14, 15, 16 , 17, 18 , 19, 20 und 21 anfängt ausgeführt, also auch 21:20 und 21:40.
    Wenn du stattdessen das letzte bild in Stunde 20 haben willst musst du eben in der Stunden-Spalte 06-20 einstellen

    Wie muß es aussehen, damit die erste Aufnahme Punkt 6 und die letzte Punkt 21 Uhr stattfindet.
    Die Zeitzone ist korrekt eingestellt und die Zeit stimmt auch, da die Zeiteinblendung im Bild (über Date-Funktion) korrekt ist.

    Dafür machst du am besten 2 Crontab Einträge:

    Code
    */20 06-20 * * * /home/pi/takeimage.sh
    00 06,21 * * * /home/pi/takeimage.sh

    Dann macht er um 06:00 ein Bild durch den 2.Crontab Eintrag, durch den 1. Crontab Eintrag macht er dann um 06:20 und 06:40 usw ein Bild - und Abends macht die 2. Zeile dann zum Abschluss auch noch mal um 21:00 ein Bild

  • Hallo meigrafd,

    OK - das kann ich so ändern. Nur vermisse ich "sh" in den crontab Einträgen. muss doch so wie auch an der Konsole eingegeben werden - oder?
    müsste es nicht

    Code
    */20 06-20 * * * sh /home/pi/takeimage.sh
    00 21 * * * sh /home/pi/takeimage.sh

    heißen? Um 6:00 sollte es ja auch mit dem ersten Eintrag klappen, nur eben um 21 Uhr nicht, daher Zeile2

    Gruß
    Onki

    Einmal editiert, zuletzt von onki (11. März 2014 um 14:44)

  • Nur vermisse ich "sh" in den crontab Einträgen. muss doch so wie auch an der Konsole eingegeben werden - oder?

    Wenn..

    • ...das Script ausführbar ist (chmod +x oder chmod 755 auf die Datei), und..
    • ...in der ersten Zeile der Datei der Shebang angegeben ist ...

    ..brauch man die Datei nicht beim ausführen an den Interpreter übergeben

    sh ist ein Interpreter, allerdings veraltet.. Dessen Nachfolger ist bash. Führt man also " bash /path/to/script " aus, wird die Datei vom Interpreter verarbeitet. sind die obigen Bedingungen aber gegeben kann man das auch weglassen also nur " /path/to/script " ausführen. Sowohl letzeres als auch bash würde ich dir empfehlen, da sh älter ist und nicht die selbe funktionalität unterstützt wie bash
    (wenn du dich auf der Konsole anmeldest befindest du dich auch in einer bash Shell)


    müsste es nicht

    Code
    */20 06-20 * * * sh /home/pi/takeimage.sh
    00 21 * * * sh /home/pi/takeimage.sh

    heißen? Um 6:00 sollte es ja auch mit dem ersten Eintrag klappen, nur eben um 21 Uhr nicht, daher Zeile2

    Stimmt, hast recht - schön mitgedacht ;)

    Du könntest die genaue Minute auch festlegen um wirklich sicher zu gehen:

    Code
    00,20,40 06-20 * * * sh /home/pi/takeimage.sh

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!