Surveillance Station Upload Snapshots auf Webspace

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.
Hallo,
setze auch bei head und tail den kompletten Pfad.
/usr/bin/head
/usr/bin/tail

Gruß Götz
 
Hmmm...leider immer noch keine Änderung.
Auch per Cronjob hats nicht funktioniert bisher.
 
Könntest Du das Skript nochmal posten und das Logfile, falls es inzwischen geschrieben wird?
 
Aufgerufen werden sollte das Script nun per Webgui mit dem Befehl:

Code:
/volume1/script/test.sh > /volume1/log/skript.log

Das Script selber lautet:
Code:
#!/bin/sh
FTP_HOST="<<www.myserver.de/file.jpg>>"
FTP_USER=<<user>>
FTP_PASS=<<pwd>>
SOURCE_DIR='/volume1/surveillance/@Snapshot/'
SOURCE_IMAGE=$(ls -p -t $SOURCE_DIR | /usr/bin/head -2 | /usr/bin/tail -1)
/usr/bin/curl ftp://$FTP_USER:$FTP_PASS@$FTP_HOST -T /volume1/surveillance/@Snapshot/$SOURCE_IMAGE

Wobei die Begriffe zwischen << >> gegen funktionierende (wie der manuelle Aufruf des Scripts ja zeigt) Zugangsdaten ersetzt werden.
 
Der Aufruf mit den Umleitungen muss so sein:
Rich (BBCode):
/volume1/script/blubb.sh  >/volume1/log/skript.log  2>&1

Ein > ohne Angabe bedeutet STDOUT umleiten
Ein 2>&1 bedeutet, STDERR nach STDOUT umleiten

Und am Anfang (2. Zeile) des Scripts:
Rich (BBCode):
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin:$PATH

Dann sollte es gehen.
 
Probier mal so:

Rich (BBCode):
#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin:$PATH

FTP_HOST="<<www.myserver.de/file.jpg>>"
FTP_USER=<<user>>
FTP_PASS=<<pwd>>

SOURCE_DIR='/volume1/surveillance/@Snapshot/'
SOURCE_IMAGE=$(ls -1pt $SOURCE_DIR/*.jpg | /usr/bin/head -1)

/usr/bin/curl ftp://$FTP_USER:$FTP_PASS@$FTP_HOST -T $SOURCE_DIR/$SOURCE_IMAGE
 
Hmmm....das Logfile wird immer noch nicht (zumindest bei Gui-Aufruf) erstellt.

Und momentan ist der Pfad zur Quelldatei etwas...schräg :D
Code:
curl: Can't open '/volume1/surveillance/@Snapshot///volume1/surveillance/@Snapshot//

:D

Ich hab $SOURCE_DIR aus der letzten Zeile mal rausgenommen.
Manueller Aufruf des Scripts: funktioniert wie bisher. Automatischer Aufruf: nichts.

Die Logdatei verweilt immer noch recht hungrig...
 
Ups, das doppelte Sourcedir habe ich übersehen.

Mach doch mal statt
Rich (BBCode):
/usr/bin/curl ftp://$FTP_USER:$FTP_PASS@$FTP_HOST -T $SOURCE_DIR/$SOURCE_IMAGE
ein
Rich (BBCode):
echo /usr/bin/curl ftp://$FTP_USER:$FTP_PASS@$FTP_HOST -T $SOURCE_DIR/$SOURCE_IMAGE

Und zeig mal, wie du das Script aus der Shell aufrufst.
 
Meiner Meinung nach ist im Skript von Ameisentaetowierer nur ein / zu viel (am Ende des SOURCE_DIR). Ohne den sollte es eigentlich sauber sein:

Rich (BBCode):
#!/bin/sh

FTP_HOST="www.myserver.de/file.jpg"
FTP_USER=user
FTP_PASS=pwd

SOURCE_DIR='/volume1/surveillance/@Snapshot'
SOURCE_IMAGE=$(/bin/ls -1pt $SOURCE_DIR/*.jpg | /usr/bin/head -1)

/bin/echo ftp://$FTP_USER:$FTP_PASS@$FTP_HOST -T $SOURCE_DIR/$SOURCE_IMAGE
/usr/bin/curl ftp://$FTP_USER:$FTP_PASS@$FTP_HOST -T $SOURCE_DIR/$SOURCE_IMAGE

Die Environmentvariablen sind sauber gesetzt (ich habe sie mir testweise anzeigen lassen) und der Output wird bei einem Skriptaufruf auch in ein Logfile geschrieben, wenn man es wie Ameisentaetowierer macht: ./blubb.sh > /volume1/log/skript.log 2>&1

Ich habe vor dem eigentlich curl-Aufruf eine echo-Zeile eingebaut, die ausgibt - und damit ins Logfile schreibt -, was curl übergeben wird.
 
Mein Aufruf:
Code:
sh test.sh >/volume1/script/script.log  2>&1

Das Script:
Code:
#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin:$PATH

FTP_HOST="www.mywebspace.de/test.jpg"
FTP_USER=usr
FTP_PASS=pwd

SOURCE_DIR='/volume1/surveillance/@Snapshot'
SOURCE_IMAGE=$(ls -1pt $SOURCE_DIR/*.jpg | /usr/bin/head -1)

/usr/bin/curl ftp://$FTP_USER:$FTP_PASS@$FTP_HOST -T $SOURCE_IMAGE


Und neuerdings ne Ausgabe in der Log-Datei:
Code:
 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
^M  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0^M  4 1118k    0     0    4 50832      0  72651  0:00:15 --:--:--  0:00:15 72721^M 20 1118k    0     0   20  231k      0   104k  0:00:10  0:00:02  0:00:08  1




//Edit: Auch das Aufrufen per GUI führt inzwischen zu einer Log-Ausgabe:
Code:
sh: /volume1/script/test.sh: Permission denied

//Edit2: Allerdings nur, wenn ich es als root ausführe. Stelle ich in der GUI als Usr Admin ein, gibts wieder keine Ausgabe.
 
Nicht schlecht. Startest Du den Skript als root? Da stimmt offensichtlich etwas mit den Rechten nicht.
 
Ich bin als root per SSH verbunden (per admin/sonstigem user gabs meine ich irgendwelche Restriktionen beim Erstellen von z.B. Log-Folder)
Und in den GUI-Einstellungen ist als User ROOT ausgewählt. (siehe: http://cysign.net/pics/dsm5.1_ftpfileupload.jpg)


//Edit: Stimmt, die Rechte sehen wie folgt aus:
Code:
-rw-r--r--    1 root     root           385 Nov  9 21:40 test.sh
 
Die Rechte der Skriptdatei solltest Du ändern:

Rich (BBCode):
chmod 754 /volume1/script/test.sh
 
Erstmal als root ein
Rich (BBCode):
chmod 755 /volume1/script/test.sh
machen.

Als User ungleich root hast du mit Sicherheit kein Schreibrecht auf die Logdatei.
Damit gibt es auch keine Ausgabe.
Du könntest aber als root ein
Rich (BBCode):
chmod 777 /volume1/script/script.log
machen, damit hat jeder Schreibrechte.
 
Irgendwie funktioniert da was mit den Rechten nicht so ganz:
Code:
mynas>chmod -rwx test.sh
mynas> ls -all
drwxr-xr-x    3 root     root          4096 Nov  9 22:07 .
drwxr-xr-x   15 root     root          4096 Nov  9 22:07 ..
drwxrwxrwx    3 root     root          4096 Nov  9 03:50 @eaDir
-rw-r--r--    1 root     root            47 Nov  9 21:52 script.log
----------    1 root     root           385 Nov  9 21:40 test.sh

Code:
mynas> chmod 755 test.sh
mynas> ls -all
drwxr-xr-x    3 root     root          4096 Nov  9 22:07 .
drwxr-xr-x   15 root     root          4096 Nov  9 22:07 ..
drwxrwxrwx    3 root     root          4096 Nov  9 03:50 @eaDir
-rw-r--r--    1 root     root            47 Nov  9 21:52 script.log
-rwxr-xr-x    1 root     root           385 Nov  9 21:40 test.sh

Sollte ich jetzt nicht rwxrwxrwx haben?


//Edit: Mir fällt grade ein Stein vom Herzen. Das manuelle Triggern per WebGUI hat grade eben funktioniert!
Jetzt aktiviere ich den Sheduler wieder und teste, ob der 5-minütige Upload funktioniert :)
 
Zuletzt bearbeitet:
Hallo,
755 ergibt genau das was Du angezeigt bekommst. Für rwxrwxrwx wäre 777 richtig.

Gruß Götz
 
Alles klar.

Danke für euere Hilfe!
Jetzt funktioniert alles, wie es soll und ich bin durch für heute ;)
Ich weiß aber schon, dass ich das Ganze in den nächsten Tagen nochmal anpacken darf. Ich darf nämlich noch zwischen den Kameras unterscheiden :D
in etwa
"cam1-datum_zeit_jpg"
"cam2-datum_zeit_jpg"
"cam3-datum_zeit_jpg"

Aber darüber kann ich heute einfach nicht mehr nachdenken :D
 
Zuletzt bearbeitet:
So, nachdem ich endlich wieder ein paar freie Minuten habe, hab ich mich wieder an meine Baustelle rangewagt.

Ich hab die Kameras inzwischen alle umbenannt, um ein einfacheres Namensschema für das Durchsuchen zu haben (früher: "Ort Cam x_datum" jetzt "camx_datum").
Dadurch konnte ich die Suchparameter minimal anpassen, was zum gewünschten Ergebnis führt:
Code:
#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:

FTP_HOST="www.myhost.com/image2.jpg"
FTP_USR= username
FTP_PASS= password

SOURCE_DIR='/volume1/surveillance/@Snapshot'
SOURCE_IMAGE=$(ls -1pt $SOURCE_DIR/cam2*.jpg | /usr/bin/head -1)

/usr/bin/curl ftp://$FTP_USER:$FTP_PASS@$FTP_HOST -T $SOURCE_IMAGE

Der Upload des gewünschten Kamerabilds funktioniert so zwar problemlos. Aber mir wäre es lieber, wenn ich nun incht für jede Kamera ein Script machen müsste, die dann womöglich zeitgleich aufgerufen werden und die Internetleitung lahmlegen, sondern wenn ich in einem Script alle Uploads nacheinander abarbeiten könnte.

Momentan benenne ich meine Zieldatei ja mit dem Aufruf des Zielhosts
Code:
FTP_HOST="www.myhost.com/image2.jpg"

gibt es hierfür eine elegantere Lösung, damit mehrere Uploads in einem Script machen kann?
 
Okay, die Lösung ist trivialer als ich dachte :D
Code:
#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin:$PATH

FTP_USER=username
FTP_PASS=password

FTP_HOST="www.mydomain.com/cam1.jpg"
SOURCE_DIR='/volume1/surveillance/@Snapshot'
SOURCE_IMAGE=$(ls -1pt $SOURCE_DIR/cam1*.jpg | /usr/bin/head -1)
/usr/bin/curl ftp://$FTP_USER:$FTP_PASS@$FTP_HOST -T $SOURCE_IMAGE

FTP_HOST="www.mydomain.com/cam2.jpg"
SOURCE_IMAGE=$(ls -1pt $SOURCE_DIR/cam2*.jpg | /usr/bin/head -1)
/usr/bin/curl ftp://$FTP_USER:$FTP_PASS@$FTP_HOST -T $SOURCE_IMAGE


Aber elegant ist das bestimmt nicht.
Hier wird zwei Mal die FTP-Verbindung geöffnet. Jemand ne Idee, wie ich das verschönern könnte?

Und kann man curl ein Bandbreitenlimit vermitteln?
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat