FTP - Upload per Script funktioniert nicht

  • Hallo,

    ich habe mich schon durch verschiedene Anleitungen gelesen, um ein Webcambild vom Pi per Script auf einen Server hochzuladen.

    Leider funktioniert es nicht. Gebe ich die Daten manuell auf der Konsole ein, klappt alles, die Verbindung funktioniert.
    Baue ich alles in ein Script ein, bekomme ich keine Verbindung zum Netzwerk.
    Für mich sieht es danach aus, als ob es ein Rechteproblem ist.
    Zur Verdeutlichung mal das Script und die Fehlermeldung:

    Und die Fehlermeldung:

    Code
    pi@stalkpi ~ $ ./knips.sh
    ftp: www.mein.server.de: Name or service not known
    Not connected.
    Not connected.
    Not connected.
    Not connected.
    Not connected.

    /mnt/ram/test.jpg existiert natürlich und ist lesbar.
    Das Servername,Username und Passwort fiktiv sind, sollte klar sein ;-).

    Weiß jemand, wo es klemmt?

    Danke!

    Gruß
    Kurt

    Einmal editiert, zuletzt von kurgil (25. Februar 2015 um 18:45)

  • Ich denke mal du gibst das in der Konsole nicht genau so ein, oder? :)

    Der ftp Client möchte eine ~/.netrc Datei haben in der der "Name or Service" hinterlegt ist.


    Da ich aber grad keine Lust hab darauf genauer einzugehen, hier eine Lösung mit Python:
    [code=php]#!/usr/bin/python
    # -*- coding: utf-8 -*-
    #
    # v0.21 by meigrafd
    #
    # requires ftputil >= v3.2
    #
    # apt-get install python-pip && pip install ftputil
    #
    #ftputil docu: http://ftputil.sschwarzer.net/trac/wiki/Documentation

    import time, sys, os
    import ftputil

    ##----- CONFIG - START ----------------------------------------

    ftpHost = "192.168.0.11"
    ftpPort = 21
    ftpUser = 'pi'
    ftpPass = 'raspberry'
    ftpRemoteDir = '/'

    ##----- CONFIG - END ------------------------------------------


    def logError(message):
    try:
    sys.stderr.write(message + "\n")
    except UnicodeEncodeError:
    sys.stderr.write(message.encode("utf8") + "\n")

    def connectFtp():
    connected = True
    ftp = None
    try:
    ftp = ftputil.FTPHost(ftpHost, ftpUser, ftpPass, port=ftpPort)
    except OSError, e:
    print >> sys.stderr, 'Got error: "%s"' % e
    connected = False
    return ftp, connected

    def progress(chunk):
    global received_size
    received_size += len(chunk)
    print("Uploading Progress: {} kB / {} kB".format(float(received_size)/1024, total_size))

    if __name__ == '__main__':
    if len(sys.argv) < 2:
    print("Usage: %s <file>" % sys.argv[0])
    sys.exit(1)
    localFile = sys.argv[1]
    ftp = None
    received_size = 0
    try:
    total_size = float(os.path.getsize(localFile))/1024 #kB
    ftp, connected = connectFtp()
    if not connected:
    print >> sys.stderr, 'Cant connect to remote! Exiting Script'
    sys.exit(1)
    #remove all whitespace characters (space, tab, newline, and so on)
    remotePath = ftpRemoteDir.rstrip('/')
    remoteFile = remotePath+"/"+localFile
    #change to remote dir
    try:
    ftp.chdir(remotePath)
    except OSError, e:
    logError("Remote Directory {} doesnt Exists!".format(remotePath))
    raise
    #upload file
    try:
    ftp.upload(localFile, remoteFile, callback=progress)
    except Exception:
    logError("Upload failed!")
    raise
    except Exception, e:
    logError("Error: %s" % (e))
    except ftputil.error.PermanentError, e:
    logError("Permanent Error occurred: %s") % (e)
    except (KeyboardInterrupt, SystemExit):
    print("\nSchliesse Programm..\n")
    finally:
    if ftp:
    ftp.close()[/php]

  • Nein, in der Konsole gebe ich das tatsächlich nicht genau so ein.
    Anstelle der Variablen setze ich die Zugangsdaten/Filenamen direkt ein.
    Das müsste nach den Tutorials (auch hier im Forum) auch funktionieren. Tut es aber nicht, da bekomme ich die gleiche Fehlermeldung vom Skript.

    Gruß
    Kurt

    PS: Danke für das Pythonscript, aber ich bin ja nicht auf eine fertige Lösung aus ;-). Mir liegt eher daran zu erfahren, warum das in den Tutorials funktioniert und bei mir nicht. Das muß ja eine Ursache haben...

  • Ja, hier zum Beispiel:

    meigrafd
    13. Juli 2014 um 14:08

    Dort wird unter der 1.Möglichkeit genau das getan, was ich auch machen möchte.

    Nur klappt es bei mir eben nicht.

  • Ich sehe in den Tutorial nur einen Unterschied, das hier die ServerIP mit OPEN geöffnet wird.

    Edit:
    Steht doch sogar dort.
    >>> Die erste Zeile schaltet den interaktiven Modus von FTP aus ( -i ) und unterbindet die automatische FTP-Anmeldung beim Verbindungsaufbau ( -n ), ansonsten würde er zunächst nach einer .netrc Datei suchen und wenn dort kein passender Host-Eintrag vorhanden wär, würde er nach den Zugangsdaten Fragen.

    Einmal editiert, zuletzt von isiprimax (26. Februar 2015 um 18:01)

  • Glaub mir, ich hab das in einer vorherigen Version meines Scriptes 1:1 übernommen, klappte trotzdem nicht. Da scheint irgendetwas anderes noch zu klemmen.
    Auch in einer Version mit curl habe ich es schon probiert.
    Nach dem Login per SSH klappt der Upload genau einmal, danach meckert er, dass der Zielhost nicht gefunden werden kann. Ein ping unmittelbar danach zeigt aber, dass die Verbindung da ist.

    Code
    curl -T /mnt/ram/up-pic.jpg -u user:pass ftp://mein.server.de/httpdocs/

    Bin ratlos...

Jetzt mitmachen!

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