Probleme mit ftp Skript im crontab

  • Hallo,

    ich würde gerne mein FTP Skript alle 10 Minuten ausführen lassen.
    Daher habe ich folgende Zeile im /etc/crontab eingefügt:

    Code
    */10 * * * * pi /home/pi/webcam/ftp.sh


    Ich habe folgendes ftp Skript als Vorlage genutzt

    Anschließend habe ich sudo chmod +x ftp.sh die Datei ausführbar gemacht.

    Nun ist die Problematik, wenn ich die Datei manuell starte mit ./ftp.sh funktioniert der Upload (eine Bilddatei) problemlos.

    Nach einem Neustart oder nach sudo /etc/init.d/cron restart wird das Skript anscheinend nicht korrekt aufgerufen, weil das entsprechende Bild nicht aktualisiert wird auf dem ftp Server.

    Kann es vielleicht daran liegen, dass ein weiteres Skript zu lange Zeit braucht bis es fertig ist? Dieses Skript ist nämlich eine Zeile über dem Aufruf der ftp.sh im crontab

    Besten Dank

    Edited once, last by julianpe (April 13, 2016 at 8:26 AM).


  • Daher habe ich folgende Zeile im /etc/crontab eingefügt:

    Code
    */10 * * * * * pi /home/pi/webcam/ftp.sh

    Eine Spalte zu viel.


    Siehe dazu am besten FAQ --> Nützliche Links / Linksammlung --> crontab

  • Quote

    Kann es vielleicht daran liegen, dass ein weiteres Skript zu lange Zeit braucht bis es fertig ist? Dieses Skript ist nämlich eine Zeile über dem Aufruf der http://ftp.sh im crontab


    Nein, selbst wenn ein Programm, das in der Crontab aufgerufen wird, Tage läuft, werden die anderen Aufrufe zu dem in der Crontab definierten Zeitpunkt aufgerufen.
    (Wenn der Rechner [der Cron-Job] läuft und noch Systemkapazitäten frei sind ;)

    Da beim Aufruf aus der Crontab nicht die vollständige Benutzerumgebung an den Job übergeben wird, sollte (muss) man alle Programme mit ihrem absoluten Pfad aufrufen.
    Entweder, in dem man diesen angibt, oder indem man die PATH-Variable in dem Programm (Script) entsprechend setzt.

    Computer ..... grrrrrr

  • Quote


    [quote]
    Da beim Aufruf aus der Crontab nicht die vollständige Benutzerumgebung an den Job übergeben wird, sollte (muss) man alle Programme mit ihrem absoluten Pfad aufrufen.
    Entweder, in dem man diesen angibt, oder indem man die PATH-Variable in dem Programm (Script) entsprechend setzt.

    Habe ich das nicht getan?
    In meiner Crontab stehen folgende Aufrufe:

    crontabqmsvg.png

    Das Bild aufnehmen mittels raspistill funktioniert.
    Anschließend wird das aufgenommene Bild mit einem Wasserzeichen versehen (branding.sh).
    Abschließend soll das Bild dann auf einen Ftp Server geladen werden.

    Und der letzte Schritt wird nicht durchgeführt mittels crontab.
    Nur wenn ich den Prozess manuell starte gelingt es.

    Edited once, last by julianpe (April 13, 2016 at 8:37 AM).

  • Du rufst drei Programme gleichzeitig auf, die eigentlich nacheinander abgearbeitet werden soll.

    Dass ist ... immer wieder mit einem überraschenden Ergebnis versehen.

    So dauert eine Aufnahme per "raspistill" schon einmal ein paar Sekunden.
    Pack die drei Aufrufe in ein Script, oder bau ein Script, dass die drei nacheinander aufruft.

    (Ich finde es auch suboptimal, wenn Crontab-Einträge in der zentralen Datei /etc/crontab einbaut. Dafür sind eigentlich die Benutzer-Crontabs gedacht.
    Aber das ist Benutzersache.)

    Computer ..... grrrrrr

  • Du scheinst meinen Link nicht gelesen zu haben?

    Guck bitte ins syslog zu dem Zeitpunkt wo der Crontabeintrag hätte ausgeführt werden sollen und poste diese Zeilen um dir effektiv helfen zu können.

    Und wenn du meinen Link gelesen hättest, hättest du auf den letzten Satz von Raspi-Berlin auch selber kommen sollen :fies:

  • So sieht es in der /var/log/syslog aus zu dem Zeitpunkt:

    Code
    Apr 13 12:20:01 raspberrypi rsyslogd-2007: action 'action 17' suspended, next retry is Wed Apr 13 12:21:01 2016 [try http://www.rsyslog.com/e/2007 ]
    Apr 13 12:20:01 raspberrypi CRON[3555]: (pi) CMD (/home/pi/webcam/turnaround.sh)
    Apr 13 12:20:07 raspberrypi CRON[3548]: (CRON) info (No MTA installed, discarding output)

    Habe jedes .sh file mit #!/bin/bash in der ersten Zeile erstellt.
    Und zum Ende jeweils einen exit 0

    Aber weiterhin sind die Probleme, dass das ftp.sh Skript nicht vernünftig ausgeführt wird.

    Edited once, last by julianpe (April 13, 2016 at 12:29 PM).

  • Ein Shebang alleine reicht nicht. Damit der Shebang zur Geltung kommt muss die Datei auch Ausführrechte besitzen.

    Bitte poste den exakten/vollständigen Befehl wie du das Script manuell ausführst - ich vermute mal du übergibst die Datei dem Interpreter und der Datei fehlen die Ausführrechte weshalb es deshalb dann auch via crontab nicht funktioniert....

  • Nun diese Zeilen:

    Apr 13 12:20:01 raspberrypi CRON[3555]: (pi) CMD (/home/pi/webcam/turnaround.sh)
    Apr 13 12:20:07 raspberrypi CRON[3548]: (CRON) info (No MTA installed, discarding output)

    sagen aus das ein Fehler aufgetreten ist und cron nicht weiß was es mit dieser Ausgabe machen soll... Es würde also eine Email an den Benutzer schicken, kann es aber nicht da kein MTA installiert ist.

    Der beste Weg wäre sämtliche Ausgaben umzuleiten - dazu ändert man den Crontabeintrag in der /etc/crontab wie folgt ab:

    Code
    */10 * * * * pi /home/pi/webcam/ftp.sh >/tmp/ftp.log 2>&1

    ...Das steht aber auch in dem von mir angegebenen Link aus Beitrag#2 ... wirklich schade das sowas nicht gelesen wird...

  • Ich habe folgendes ftp Skript als Vorlage genutzt

    Ich behaupte mal, dass dein Script, wenn es mit dem cron-Aufruf ausgeführt wird, nicht weiss, wo der Befehl "ftp" liegt (Pfad fehlt...)

    Das Hauptproblem hier ist IMMER WIEDER, dass man sich klar machen muss, dass Cron-Ausführungen in einem sehr abgemagerten Environment ablaufen: Lass dir einfach mal mit cron die $PATH Variable ausgeben, dann weisst du, was ich meine.

    Abhilfe:
    Entweder, die schreibst an den Anfang deines Scriptes eine die PATH-Variable so, dass alle deine aufgerufenen Befehle gefunden werden oder du schreibst vor jeden Befehl in deinem Script IMMER den vollen Aufrufpfad.

    Wie bekomme ich den raus?

    Code
    which ftp


    gibt den Pfad, den schreibst du so rein...

    Das machst du für jeden Befehl... dann geht es.

    Mfg, das Zen

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!