Probleme mit Cronjobs

  • Hallo,

    ich habe mir ein Shell-Script geschrieben camera.sh das ein Foto aufnimmt und auf einen FTP-Server spielt.
    Klappt wunderbar wenn ich es manuell ausführe.

    Mit einem Cronjob habe ich es aber bisher noch nicht hingebracht.
    Es gibt da SOVIELE Möglichkeiten und ich steig echt nicht durch.

    Erstens:
    Wo konfiguriere ich mir einen Cronjob korrekt ?
    in sudo nano /etc/crontab ?
    oder
    in crontab -e
    oder
    in sudo crontab -e
    und was ist jeweils der Unterschied ?

    Zweitens:
    Wie gebe ich den Cronjob (soll jede Minute laufen) korrekt an ?

    * * * * * bash /home/pi/camera/camera.sh
    oder
    * * * * * root /home/pi/camera/camera.sh
    oder nur
    * * * * * /home/pi/camera/camera.sh

    Bisher hat keine einzige Kombination funktioniert :(

  • Die systemweite "/etc/crontab" ist m. E. OK. Wenn root-Rechte für die Ausführung des Scriptes erforderlich sind, ist root OK. Das Script muss ausführbar (chmod 755) sein. Evtl. absolute Pfade verwenden, wenn nicht in der PATH-Variable der crontab beinhaltet. Für die minütliche Ausführung:

    Code
    */1 *   * * *     root  /home/pi/camera/camera.sh > /dev/null 2>&1
    # ------------------

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

    • Offizieller Beitrag

    Vermute auch eher ne fehlende shebang. Absolute Pfade sollte man sich in Systemdateien eh angewöhnen.

    Code
    sudo crontab -e
    */1 *   * * *    /bin/bash /home/pi/camera/camera.sh > /dev/null 2>&1
  • Ok, der cronjob führt jetzt wenigstens mal aus und speichert die Bilder ab.

    Aber der Versand auf FTP klappt noch nicht - obwohl das Skript das an sich sehr gut macht.

    Gibt es eine Möglichkeit herauszufinden warum ?

    Das Skript sieht so aus:

    Kann es sein dass FTP irgendwelche Rechte braucht die es nicht hat ?
    Gibt es irgendwo eine aussagekräftige FEhlermeldung ?

  • Mit /bin/bash /home/pi/camera .... etc. in der /etc/crontab geht gar nichts mehr

    mit
    sudo crontab -e
    */1 * * * * /bin/bash /home/pi/camera/camera.sh > /dev/null 2>&1

    macht er wieder lokale Bilder, aber schickts nichts auf den FTP :(
    Automatisch zusammengefügt:
    OK, im Log sehe ich jetzt dass das File mittels FTP einfach nicht geschrieben wird und er sich mit "goodbye" verabschiedet.

    Das gleiche Skript mit der Hand ausgeführt überträgt alles problemlos .... !?!?


    Einmal editiert, zuletzt von Gawan (30. Juli 2015 um 23:15)


  • Das gleiche Skript mit der Hand ausgeführt überträgt alles problemlos .... !?!?

    Hast Du "mit der Hand ausgeführt", auch sudo (root) benutzt?
    Versuch mal im Script auch mit "-p" für passive mode.
    Evtl. in der (richtigen) crontab, wenn möglich, auch mal ohne root versuchen.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Nein, aber "mit der Hand" ist es egal ob ich root nutze oder nicht, es klappt einfach

    sudo ./camera.sh macht genau das gleiche wie ./camera.sh

    Was ist denn "der richtige" Crontab ? Und warum gibts da soviele verschiedene ??

  • Es gibt verschiedene für verschiedene Aufgaben.
    Es gibt eine "globale" mit der du alles machen kannst die mit root-Rechten läuft.
    Es gibt für jeden Benutzer eine die mit dessen Rechten läuft
    Es gibt jeweils noch die Crontabs, die ihre Einträge automatisch monatlich etc ausführen, deshalb heisen sie dann auch .monthly etc.

  • Fahr' noch mal auf NULL ...
    Poste doch mal Deinen camera-script. Da steht z.B.

    Bash
    #!/bin/sh


    drin. Zudem ist wohl das raspistill ohne Pfadangabe ...
    Eventuell kommen wir da dann weiter ...

    Ein weiteres Problem könnte sein, dass Dein cronjob nicht im Hintergrund läuft und so den daemon blockiert ...

    //EDIT: parallel in einem -> zweiten Thread <- zu posten dürfte eher dazu geeignet sein, Verwirrung zu stiften ...

    cu,
    -ds-

  • Hallo,

    ich spiele jetzt seit knapp 12 Stunden an dem Ding herum und bin kurz davor ins Keyboard zu beissen :(
    Du hast natürlich recht mit den beiden Threads, aber mir ist jetzt echt schon JEDER kleine TIpp willkommen - je mehr davon desto besser.

    Ich hab das Skript in erster Linie zusammenkopiert und war froh als es manuell mit ./camera.sh funktioniert hat.
    Danach habe ich mich nur mehr auf den Cronjob konzentriert ....

    Du sagst in meinem Skript steht

    #!/bin/sh

    drinnen. Stimmt, aber ist das gut oder schlecht ? :)

    Raspistill rufe ich ohne Pfadangabe auf - stimmt, ich kann es aber auch manuell von überall aufrufen, außerdem weiß ich den konkreten Pfad leider nicht

    Was mir gerade aufgefallen ist: Aus dem /home/-Verzeichnis kann ich das camera.sh nicht aufrufen, aber deshalb habe ich im Cronjob ja den Pfad angegeben !?


    Den Teil mit dem Cronjob im Hintergrund habe ich nicht verstanden.

    Einmal editiert, zuletzt von Gawan (31. Juli 2015 um 21:27)

  • Also:

    • das #!/bin/sh nach #!/bin/bash ändern
    • statt raspistill den gesamten Pfad /usr/bin/raspistill angeben (kriegst Du mit which raspistill raus)
    • ftp ebenfalls als gesamten Pfad angeben: /usr/bin/ftp (mit which ftp überprüfen)
    • crontab-Eintrag nach: /home/pi/camera/camera.sh &>/dev/null & ändern


    und dann nochmal probieren ...

    cu,
    -ds-

  • -> das #!/bin/sh nach #!/bin/bash ändern
    hab ich schon entdeckt und erledigt :)

    -> statt raspistill den gesamten Pfad /usr/bin/raspistill angeben (kriegst Du mit which raspistill raus)
    erledigt

    -> ftp ebenfalls als gesamten Pfad angeben: /usr/bin/ftp (mit which ftp überprüfen)
    erledigt

    - >crontab-Eintrag nach: /home/pi/camera/camera.sh &>/dev/null & ändern
    damit drehe ich mir die Log-Einträge ab, oder hat das noch einen anderen Nutzen ?

    Test:
    Manuell: klappt
    Automatisch: klappt nicht

    Wenn ich das Log einschalte sehe ich, dass er einfach nichts überträgt - ansonsten siehts ja gar ned so schlecht aus:

  • Also ... gerade extra ausgetestet:
    Eintrag in die crontab mit crontab -e:

    Code
    0-59 * * * * /home/pi/camera/camera.sh &>/dev/null


    /home/pi/camera/camera.sh muss ausführbar sein (chmod +x)

    Dann der script:

    Funktioniert bei mir anstandslos ...

    //EDIT: Horroreyes ... gratuliere ... ich denke, genau das war wohl der Fehler ...
    Irgendwie achtet man auf so was kaum noch ...

    cu,
    -ds-

  • nein :(

    Ich hab allerdings keinen Eintrag in Crontab -e sondern in /etc/crontab

    sudo nano /etc/crontab

    Die aktuellste Version des Skriptes nochmal:

    Einmal editiert, zuletzt von Gawan (31. Juli 2015 um 22:32)

  • das nein bezog sich auf meinen Vorschlag?
    Er macht doch die Bilder, oder? Dann ist die crontab doch schon funktionstüchtig und wir können uns auf das Script konzentrieren. Übersehe ich etwas?

  • Korrekt, die Bilder hat er schon recht bald gemacht, nur das Uploaden nicht

    Das "Nein" bezog sich auf den Erfolg nach der Pfadänderung beim $DATE.jpg
    Automatisch zusammengefügt:

    Neue Fehlermeldung im Log:

    Code
    230 OK. Current directory is /
    Remote system type is UNIX.
    Using binary mode to transfer files.
    local: /home/pi/camera/2015-07-31_2236.jpg remote: /home/pi/camera/2015-07-31_2236.jpg
    227 Entering Passive Mode (81,19,145,55,41,197)
    553 Can't open that file: No such file or directory
    221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
    221 Logout.

    Das File liegt aber definitiv da:

    Einmal editiert, zuletzt von Gawan (31. Juli 2015 um 22:38)

Jetzt mitmachen!

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