Surveillance Station Upload Snapshots auf Webspace

Status
Für weitere Antworten geschlossen.

goetz

Super-Moderator
Teammitglied
Sehr erfahren
Mitglied seit
18. Mrz 2009
Beiträge
14.167
Punkte für Reaktionen
415
Punkte
393
Hallo,
setze auch bei head und tail den kompletten Pfad.
/usr/bin/head
/usr/bin/tail

Gruß Götz
 

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
Hmmm...leider immer noch keine Änderung.
Auch per Cronjob hats nicht funktioniert bisher.
 

dil88

Benutzer
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.911
Punkte für Reaktionen
2.361
Punkte
829
Könntest Du das Skript nochmal posten und das Logfile, falls es inzwischen geschrieben wird?
 

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
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.
 
Mitglied seit
10. Jan 2014
Beiträge
393
Punkte für Reaktionen
0
Punkte
0
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.
 
Mitglied seit
10. Jan 2014
Beiträge
393
Punkte für Reaktionen
0
Punkte
0
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
 

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
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...
 
Mitglied seit
10. Jan 2014
Beiträge
393
Punkte für Reaktionen
0
Punkte
0
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.
 

dil88

Benutzer
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.911
Punkte für Reaktionen
2.361
Punkte
829
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.
 

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
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.
 

dil88

Benutzer
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.911
Punkte für Reaktionen
2.361
Punkte
829
Nicht schlecht. Startest Du den Skript als root? Da stimmt offensichtlich etwas mit den Rechten nicht.
 

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
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
 

dil88

Benutzer
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.911
Punkte für Reaktionen
2.361
Punkte
829
Die Rechte der Skriptdatei solltest Du ändern:

Rich (BBCode):
chmod 754 /volume1/script/test.sh
 
Mitglied seit
10. Jan 2014
Beiträge
393
Punkte für Reaktionen
0
Punkte
0
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.
 

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
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:

goetz

Super-Moderator
Teammitglied
Sehr erfahren
Mitglied seit
18. Mrz 2009
Beiträge
14.167
Punkte für Reaktionen
415
Punkte
393
Hallo,
755 ergibt genau das was Du angezeigt bekommst. Für rwxrwxrwx wäre 777 richtig.

Gruß Götz
 

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
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:

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
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?
 

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
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