Script wird von cron nicht ausgeführt?

  • Guten Morgen,

    ich habe an meinen Raspberry eine Webcam angehängt und lasse ihn nach diesem Tutorial alle 2 Minuten ein Bild aufnehmen und auf meinen Server hochladen: http://derkev.in/262/raspberry-…p-webcamserver/

    Das funktioniert einwandfrei, sowohl in der Shell als auch per cron.

    Dann habe ich ein weiteres Script erstellt nach dieser Vorlage: http://pastebin.com/8se6typR
    Konkret sieht mein Script so aus:

    Das Erstellen der Thumbs habe ich auskommentiert - auch das funktioniert auf der Shell einwandfrei.

    Mein Problem: cron führt dieses Script leider nicht aus, meine crontab sieht so aus:

    Die SHELL und PATH Angaben habe ich im Internet gefunden, aber das scheint auch noch nicht zu reichen. Kann mir jemand helfen?

    • Offizieller Beitrag

    Hey angares,

    dein Problem ist relativ einfach zu lösen ;)
    In deinem Script startest du 2 Programme: fswebcam / ncftpput
    Da es unter Cron keine PATH Variable gibt müsstest du in deine Script den direkten Pfad zu den beiden Programmen angeben...
    Mit dem Befehl whitch fswebcam/ncftpput bekommst du den Pfad zu dem Programm...

    Alternative wäre du benutzt nicht crontab -e sondern editierst die crontab Tabelle direkt.
    Die crontab Tabelle liegt unter /etc/crontab (editierbar mit root)

    Hoffe dies konnte dir weiterhelfen ;)

    lieben Gruß
    Turael

    Ich bin ein gefallener Engel namens Turael.

    Einst vor langer Zeit rebelierte ich im Himmel bis Gott mich auf die Erde verbannte.

    Doch meine taten werden kein ende finden....

  • Hallo Turael,

    danke für deine schnelle Antwort, ich werde es sofort ausprobieren!
    Allerdings: in dem Script, das zuverlässig ausgeführt wird, habe ich auch keine vollständigen Pfadangaben drin:

    Ich ändere mein Script mal ab und sehe, was passiert ^^

    • Offizieller Beitrag

    Wenn du es unter deinem Benutzer oder mit root ausführst dann wird es auch klappen weil die PATH Variable gesetzt wurde.
    In dieser Variable stehen alle Pfade drin wo sich ausführbare Dateien befinden können.

    Und wenn diese Fehlt gibt es keine ausführbare Dateien/Scripte/Programme - nur die Shell und Bash interne Befehle...

    Ich bin ein gefallener Engel namens Turael.

    Einst vor langer Zeit rebelierte ich im Himmel bis Gott mich auf die Erde verbannte.

    Doch meine taten werden kein ende finden....

  • Ich habe meine crontab mal so eingestellt, dass das Script alle 2 Minuten ausgeführt wird - es klappte allerdings nicht, sprich: es wurde kein Bild erstellt und hochgeladen :( Das andere Script funktioniert weiterhin einwandfrei und da habe ich gar keine absoluten Pfade drin.

    Hast du eventuell noch eine Idee? Gibt es vielleicht noch Probleme mit den Variablen oder den mv- und rm-Befehlen?

    Einmal editiert, zuletzt von angares (19. Juni 2013 um 11:10)

  • Hast du wie erwähnt im Script die Pfade angegeben ?


    #!/bin/bash
    filename=/pfad/zu/$(date +"%d.%m.%Y-%H:%M").jpg

    echo -e "\033[44;1;33m Variable setzen \033[0m"
    echo "Dateiname = "$filename
    echo ""
    sleep 1

    echo -e "\033[44;1;33m Bild aufnehmen \033[0m"
    sleep 1
    /pfad/zu/fswebcam -c /pfad/zu/webcam.cfg
    echo ""

    echo ""
    echo -e "\033[44;1;33m Bild umbenennen in "$filename "\033[0m"
    mv /pfad/zu/live.jpg $filename
    echo -e "\e[00;36mdone \e[00m"
    echo ""


    echo -e "\033[44;1;33m Bild Upload \033[0m"
    /pfad/zu/ncftpput -f /pfad/zu/ftp.cfg /hour $filename
    echo ""


    echo -e "\033[44;1;33m Loeschen von " $filename "\033[0m"
    rm $filename
    echo -e "\e[00;36mdone \e[00m"
    echo ""

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

  • Nein - ich habe vorher etwas anderes probiert und das funktioniert auf einmal .. wenn ich nur ein Script zum Ausführen angebe, funktioniert es ...

    Mit beiden Einträgen funktioniert nur ein Script. Als ich dann das Script auskommentiert habe, das alle 2 Minuten ausgeführt wird, klappt plötzlich das stündlich auszuführende Script.

    Muss man denn in Crontab irgendetwas beachten, wenn man mehr als ein Script ausführen will?

    Einmal editiert, zuletzt von angares (19. Juni 2013 um 12:26)

  • Update:

    Anscheinend funktioniert es jedesmal nicht, wenn die Scripte zur gleichen Zeit ausgeführt werden - ich habe testweise das erste Script nach 2 Minuten, das zweite Script nach 3 Minuten ausführen lassen und so gehts nun.

  • Gibt es eine Möglichkeit, das 2-Minuten-Script in Crontab zu jeder vollen Stunde nicht zu starten (außer 2,4,6,8.. * * * * /), damit es dem stündlich ausgeführten Script nicht in die Quere kommt?

    Einmal editiert, zuletzt von angares (19. Juni 2013 um 16:55)

  • es gibt natürlich die etwas brachiale Methode statt */2 die Zeiten anzugeben, also:

    2,4,6,...,56,58 * * * * ...

    Ich arbeite lieber mit einem Lock-Verzeichnis, z.B.:

    Keep it simple [,&] stupid

    Einmal editiert, zuletzt von kungel (19. Juni 2013 um 17:11)

  • Die Zeilen für das Anlegen des Verzeichnisses und die if-Abfrage stehen am Anfang der beiden Scripte.

    Wenn das Script startet, versucht es das Verzeichnis mit mkdir anzulegen.
    Anschließend werte ich den return-Code aus.
    Ist er 0, war das Anlegen erfolgreich und das Script darf weiter arbeiten.

    Ist das Verzeichnis bereits von einem anderen Prozeß angelegt, kann es nicht erneut angelegt werden.
    Der return-Code ist dann 1, die Bedingung der if-Abfrage ist somit erfüllt und das Script steigt mit exit aus.

    Am Ende der Scripte muss natürlich das Verzeichnis gelöscht werden.

    Warum das Anlegen eines Verzeichnis besser ist als eine Lock-Datei, steht hier in aller Ausführlichkeit:
    http://www.linux-magazin.de/Ausgaben/2012/05/Bash-Bashing

    Keep it simple [,&] stupid

    Einmal editiert, zuletzt von kungel (19. Juni 2013 um 17:28)

  • Großartig! Und so elegant :) Danke dir kungel, das hat mir nicht nur bei meinem aktuellen Problem geholfen, sondern mich auch in Bezug auf Linux generell weiter gebracht! Ich setze den Thread dann auf erledigt :)

    PS: Hm.. ich les gerade den Artikel, aber so ganz klar ist mir noch nicht, warum das stündlich laufende Script den Vorzug bekommt - geklappt hat es jedenfalls eben

    Einmal editiert, zuletzt von angares (19. Juni 2013 um 18:01)

  • Ich schätze, da hast du einen Fehler gemacht oder es gibt ein anderes Problem.
    Richtig angewendet arbeitet es zuverlässig. Und nicht nur bei mir, ist ja schließlich nichts Neues und ich habe es auch nur abgeguckt.

    Keep it simple [,&] stupid

  • Ich habe genau das selbe vor und bekomme immer folgende Fehlermeldung wenn der Cron ausgeführt wird:

    Code
    (CRON) info (No MTA installed, discarding output)

    Cron so angelegt:

    WEbcamrun.sh

    Bash
    #!/bin/bash
    echo -e "\033[44;1;33m Bild Upload  \033[0m"
    /usr/bin/ncftpput -f /home/pi/ftp.cfg /live/outdoor /home/pi/images/outdoor/lastsnap.jpg

    manuell läuft der Script ohne Probleme. Habe ich dort irgendwo einen Denkfehler?

Jetzt mitmachen!

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