cronjob - Wald vor lauter Bäumen

  • Guten Morgen zusammen,


    ich bin hier gerade vollkommen verloren. Vermutlich übersehe ich irgendwas völlig blödes. Mein Ziel ist das Aufnehmen eins Bildes mittels raspistill. Das soll dann auf einen ftp geladen werden.


    Bash: ftp-upload.sh
    #!/bin/bash
    rm /home/pi/Pflanzen.jpg
    /usr/bin/raspistill -o /home/pi/Pflanzen.jpg --annotate 12
    /usr/bin/curl -T /home/pi/Pflanzen.jpg ftp://host.de//html/Pflanzen/Pflanzen_$(date +%Y%m%d_%H%M).jpg --user user:pw


    Code
    pi@raspberrypi:~ $ ls -al ftp-upload.sh
    -rwxr-xr-x 1 pi pi 243 May  4 10:40 ftp-upload.sh


    Code: crontab -e
    * * * * * /home/pi/./ftp_upload.sh


    Wenn ich das Script mittels putty aufrufe (./ftp-upload.sh) wird alles normal ausgeführt.


    Cron führt den Befehl wohl auch aus, aber es wird weder ein Bild aufgenommen und gespeichert, noch wird ein Bild hochgeladen.

    Code: grep CRON /var/log/syslog
    May  4 10:51:01 raspberrypi CRON[1800]: (pi) CMD (/home/pi/./ftp_upload.sh)
    May  4 10:51:01 raspberrypi CRON[1796]: (CRON) info (No MTA installed, discarding output)

    Ich würde mich über einen kleinen Denkanstoß freuen.


    Viele Grüße

  • Da seid Ihr Euch ja einig ;)


    leider brachte das nicht das gewünschte Ergebnis:

    Code
    May 4 11:05:11 raspberrypi CRON[658]: (pi) CMD (/home/pi/ftp_upload.sh)
    May 4 11:05:11 raspberrypi CRON[654]: (CRON) info (No MTA installed, discarding output)


    Es wird keine Datei angelegt.


    Ich habe auch mal rm durch /bin/rm im Script ersetzt:

    Bash
    #!/bin/bash
    /bin/rm /home/pi/Pflanzen.jpg
    /usr/bin/raspistill -o /home/pi/Pflanzen.jpg --annotate 12
    /usr/bin/curl -T /home/pi/Pflanzen.jpg ftp://host.de//html/Pflanzen/Pflanzen_$(date +%Y%m%d_%H%M).jpg --user user:pw


    Kurze Frage nebenbei:

    im Crontab muss am Ende noch eine leere Zeile sein, richtig? Muss am Ende des letzten Befehls noch ein Space sein?

  • Ich habe auch mal rm durch /bin/rm im Script ersetzt:

    Bash
    #!/bin/bash
    /bin/rm /home/pi/Pflanzen.jpg
    /usr/bin/raspistill -o /home/pi/Pflanzen.jpg --annotate 12
    /usr/bin/curl -T /home/pi/Pflanzen.jpg ftp://host.de//html/Pflanzen/Pflanzen_$(date +%Y%m%d_%H%M).jpg --user user:pw

    Wo befindet sich "host.de"? Muss die Übertragung mit curl auch jede Minute statt finden? Wie groß ist die jpg-Datei bzw. wie lange dauert die Übertragung mit curl?

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

  • host.de ist in Deutschland, ich habe das nur jede Minute gestartet, damit ich Änderungen schnell sehe. Die Aufnahme des Bildes dauert ca 2 Sek und das hochladen (ca 2,7 Mb) nochmal 2 sek.


    Das komische ist, dass ja nicht mal die vorhandene Datei (Pflanzen.jpg) gelöscht wird...

  • host.de ist in Deutschland, ...

    OK, dann teste mal mit tcpdump (oder gleichwertig) auf deinem PI, ob der cronjob eine Verbindung per curl zu host.de auch herstellen will bzw. kann. Z. B.:

    Code
    sudo tcpdump -vvveni <output-Interface> dst host <aktuelle-IP-Adresse-"host.de"> and 'tcp[tcpflags] & (tcp-syn) != 0'

    (oder gleichwertig). Ohne spitze Klammern und output-Interface bzw. die IP-Adresse für host.de anpassen.


    EDIT:


    Versuch mal mit der "/bin/sh" statt mit der "/bin/bash".


    ... und bei rm mit "-f".


    Die shebang mit "-e": #!/bin/sh -e

    In der crontab, nach der "PATH="-Zeile die Zeile:

    Code
    MAILTO=""

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

    Edited 4 times, last by rpi444 ().

  • in meiner crontab gibt es gar keine PATH Zeile:

  • in meiner crontab gibt es gar keine PATH Zeile:

    Ja sorry, stimmt, weil es eine usereigene crontab ist.

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

  • Ok,


    Code
    pi@raspberrypi:~ $ sudo tcpdump -vvven wlan0 dst host host.de and 'tcp[tcpflags] & (tcp-syn) != 0'
    tcpdump: syntax error in filter expression: syntax error

    Der Befehl geht für meinen Geschmack vieeeel zu tief in die Materie. Da bin ich auchgeschmissen ;)

  • Code
    pi@raspberrypi:~ $ sudo tcpdump -vvven wlan0 dst host host.de and 'tcp[tcpflags] & (tcp-syn) != 0'
    tcpdump: syntax error in filter expression: syntax error

    Der Befehl geht für meinen Geschmack vieeeel zu tief in die Materie.

    Nein. Statt host.de die Ausgabe von:

    Code
    host -t A host.de

    verwenden. Das wird eine IP-Adresse sein.


    Du hast das i vergessen:

    Code
    sudo tcpdump -vvveni wlan0 ....

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

  • Code
    pi@raspberrypi:~ $ sudo tcpdump -vvven wlan0 dst host 109.XXX.XXX.18 and 'tcp[tcpflags] & (tcp-syn) != 0'
    tcpdump: syntax error in filter expression: syntax error


    Ich hab mal einen cronjob dazu gepackt: touch /home/pi/test.txt.


    Die wird auf jeden Fall auch automatisch angelegt.

  • Code
    pi@raspberrypi:~ $ sudo tcpdump -vvven wlan0 dst host 109.XXX.XXX.18 and 'tcp[tcpflags] & (tcp-syn) != 0'
    tcpdump: syntax error in filter expression: syntax error

    Du hast das i (für interface) vergessen:

    Code
    sudo tcpdump -vvveni wlan0 dst host 109.XXX.XXX.18 and 'tcp[tcpflags] & (tcp-syn) != 0'

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

  • Es wird nichts automatisch übertragen. Wenn ich manuell anstoße, sehe ich das folgende mit tcpdump

    Code
    pi@raspberrypi:~ $ sudo tcpdump -vvveni wlan0 dst host XXXXXX and 'tcp[tcpflags] & (tcp-syn) != 0'
    tcpdump: listening on wlan0, link-type EN10MB (Ethernet), capture size 262144 bytes
    11:53:19.275529 X:X:X:X > X:X:X:X, ethertype IPv4 (0x0800), length 74: (tos 0x0, ttl 64, id 57251, offset 0, flags [DF], proto TCP (6), length 60)
        XXXX > XXX.21: Flags [S], cksum 0x18a4 (correct), seq 3668873753, win 29200, options [mss 1460,sackOK,TS val 1099290313 ecr 0,nop,wscale 6], length 0
    11:53:19.496417 XXX > cXXX, ethertype IPv4 (0x0800), length 74: (tos 0x0, ttl 64, id 44728, offset 0, flags [DF], proto TCP (6), length 60)
        XXX > XXXX: Flags [S], cksum 0x5b29 (correct), seq 2296439656, win 29200, options [mss 1460,sackOK,TS val 1099290534 ecr 0,nop,wscale 6], length 0

    Umleitung eines eventuellen Fehlers:

    Code
    pi@raspberrypi:~ $ cat ausgabe.txt
    pi@raspberrypi:~ $

    leere Datei...


    Gruß


    PS: Ich habe auch mal im curl Befehl den --user in " " gesetzt: Dachte vielleicht hat der Probleme mit Sonderzeichen im PW

    Code
    --user "user:pass"
  • Es wird nichts automatisch übertragen.

    Dann versuch mal nur als Test, mit der systemweiten "/etc/crontab" und tcpdump. Hast Du die shebang deines Scriptes angepasst?

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

  • nichts zu sehen im TCPdump wird laut log aber ausgeführt.


    Aktuelle ftp-upload.sh:

    Bash
    #!/bin/sh -e
    /bin/rm -f /home/pi/Pflanzen.jpg
    /usr/bin/raspistill -o /home/pi/Pflanzen.jpg --annotate 12
    /usr/bin/curl -T /home/pi/Pflanzen.jpg ftp://host.de//html/Pflanzen/Pflanzen_$(date +%Y%m%d_%H%M).jpg --user "user:pass"


    nach der Anpassung von hyle's Befehl:

    Code
    pi@raspberrypi:~ $ cat ausgabe.txt
    /bin/sh: 1: /home/pi/ftp_upload.sh: not found

    komisch. Also crontab Zeile nochmal neu per Hand eingetippt.


    --> Funktioniert.

    Code
    vorher........: * * * * * /home/pi/ftp_upload.sh
    neu eingegeben: * * * * * /home/pi/ftp-upload.sh >> /home/pi/ausgabe.txt 2>&1



    Fragt mich nicht, woran das lag.


    Ich habe den Dateinamen reinkopiert gehabt. Meint ihr, dass das ein Problem sein kann?



    Ich danke Euch allen für die schnelle Interaktion hier. Immer wieder beeindruckend, wie schnell man hier Hilfe bekommt! Danke!

  • Mit Unterstrich oder mit Bindestrich?


    EDIT:


    Da haben wir nicht aufgepasst. Es war schon aus dem Beitrag #1 ersichtlich.

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