Kniffliges Problem im Bezug mit Shell // Html // php

Status
Für weitere Antworten geschlossen.

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
384
Punkte für Reaktionen
10
Punkte
18
Hallo,

Ich habe da ein Kleines Problem.... vorweg erstmal ein paar Infos.
Ich habe mir eine Html seite mit Php und einer SQL Datenbank zusammen "gebaut"
nun habe ich vor mittels:

PHP:
shell_exec('/volume1/01_Synology/Scripts/Mount_Umount.sh "mount movie"  >> "/volume1/01_Synology/ProtokolleDS/Scripts/Info_Web_Server/Festplatte_Ein_Movies.log"');
auszuführen über einen Butten in html was hier ja nun nicht so wichtig ist wie...
wie gesagt mit dem obigen Code starte ich das script welches auch klappt nur bekomme ich dann:

Rich (BBCode):
Friday 28 October 2016 - 23h:45min:10sec - Freigabe erteilt [ Movie ]!!  // von mir ausgegeben
Failed to Unmount USB device sdt. // vom System ausgegeben
Error Code: [0x2000 file_get_key_value.c:108] // vom System ausgegeben
Friday 28 October 2016 - 23h:45min:10sec - ERROR 4 // von mir ausgegeben
Friday 28 October 2016 - 23h:45min:10sec - Mount USB device sdt FAILED [ MOVIE ]. // von mir ausgegeben

diese Meldung.... wenn ich nun das script:

Rich (BBCode):
/volume1/01_Synology/Scripts/Mount_Umount.sh "mount movie"
über die Kommandozentrale starte geht dies natürlich ohne Probleme .....

ich weis nun nicht wirklich was ich dagegen tun kann damit ich das script so ausführen kann über meine Webseite.......
hab ihr da irgend welche Ideen was ich da machen könnte ??

ich würde mich über jegliche Hilfe sehr freuen.

p.s. vorweg vllt noch ja das Script kann von html ausgeführt werden es hat die Berechtigung....

ich danke euch schon mal vorweg.

lg
kalysto
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.674
Punkte für Reaktionen
2.077
Punkte
829
In einer Usershell wird ein bestimmtes Environment gesetzt - z.B. die PATH-Variable. Das ist in der PHP-Laufzeitumgebung möglicherweise nicht so. Insofern könnte es eventuell helfen, wenn Du das aufgerufene Shell-Skript so formulierst, dass Pfade von Programmen drin stehen u.ä.
 

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
384
Punkte für Reaktionen
10
Punkte
18
das heißt du würdest in dem falle das so machen:

"ALT"
Rich (BBCode):
grep -v $DEVICE_NAME_S $TARGET_FILE > $TMP_FILE

"NEU"
Rich (BBCode):
/bin/grep -v $DEVICE_NAME_S $TARGET_FILE > $TMP_FILE

aber das sollte passen so oder ?:

Rich (BBCode):
/usr/syno/bin/synousbdisk -umount $DEVICE_NAME_S

meintest du das denn eig. mit deiner aussage bevor ich das nun alles ändere ??
denn eig. ist oder habe ich immer nach dem Shebang eine PATH="....." Variable wo alle Pfade vorhanden sind.

ich danke dir schon mal
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.674
Punkte für Reaktionen
2.077
Punkte
829
Wenn Du eine PATH-Variable zu Beginn des Skripts definiert hast, dann musst Du hier nichts tun, wenn die benötigten Pfade drinstehen. $TARGET_FILE, $TMP_FILE usw. sind auch so definiert, dass sie unabhängig von der Umgebung korrekt arbeiten, nehme ich an.

Edit: Könnte es ein Rechteproblem sein?
 

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
384
Punkte für Reaktionen
10
Punkte
18
moin,

Ja das mit der PATH-Variable mache ich eig. grundsätzlich damit ich schon mal Fehlerquellen vermeiden kann:

Rich (BBCode):
#!/bin/sh

PATH="/opt/bin:/usr/local/git/bin/:/var/packages/JavaManager/target/Java/bin:/var/packages/JavaManager/target/Java/jre/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/opt/bin:/lib/python2.7/site-packages:/usr/local/git/bin:/volume1/01_Synology/Scripts:/volume1/02_public:/volume1/02_public/Test Ordner:/var/packages/JavaManager/target/Java/bin:/var/packages/JavaManager/target/Java/jre/bin"

Alle Variablen werden entweder direkt im Script benannt oder werden von:

Rich (BBCode):
df -h

bezogen

Direkt im Script
Rich (BBCode):
TARGET_FILE="/tmp/usbtab"
TMP_FILE="/tmp/usbtab.new"

z.b. von:
Rich (BBCode):
df -h
$DEVICE_NAME_S

ich denke auch das es an den rechten liegen könnte da ich ja auf system datein zugreifen tue wie z.b. "/tmp/usbtab" nur weis ich nicht wie ich das umgehen kann...
denn auf: TARGET_FILE und TMP_FILE machen ich jeweils ein:
Rich (BBCode):
chmod 777
da sonst nichts ginge.....

ich mag das mit den rechten nicht :(
ich hoffe du hast ne Idee :D
 

hvkls

Benutzer
Mitglied seit
23. Dez 2012
Beiträge
463
Punkte für Reaktionen
0
Punkte
22
Zeig doch mal das gesamte Script Mount_Umount.sh sowie die Ausgabe des Befehls mount .
 

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
384
Punkte für Reaktionen
10
Punkte
18
die Ausgabe ist ja oben und das script möchte ich ungerne hier Posten!!!
da das script funktioniert da ich es über die Kommandozentrale ohne Probleme bedienen kann....
 

hvkls

Benutzer
Mitglied seit
23. Dez 2012
Beiträge
463
Punkte für Reaktionen
0
Punkte
22
Dann geh den Hinweisen, die ich gegeben habe, einfach selbst nach. ;)
 

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
384
Punkte für Reaktionen
10
Punkte
18
versteh ich nicht :D welche denn ??

das war hier die ausgabe des Scripts!:

Rich (BBCode):
Friday 28 October 2016 - 23h:45min:10sec - Freigabe erteilt [ Movie ]!!  // von mir ausgegeben
Failed to Unmount USB device sdt. // vom System ausgegeben
Error Code: [0x2000 file_get_key_value.c:108] // vom System ausgegeben
Friday 28 October 2016 - 23h:45min:10sec - ERROR 4 // von mir ausgegeben
Friday 28 October 2016 - 23h:45min:10sec - Mount USB device sdt FAILED [ MOVIE ]. // von mir ausgegeben
 

hvkls

Benutzer
Mitglied seit
23. Dez 2012
Beiträge
463
Punkte für Reaktionen
0
Punkte
22
Wenn "mount" einen Fehler rauswirft, schau zuerst, wieso.
 

ruedi61

Gesperrt
Mitglied seit
01. Apr 2016
Beiträge
72
Punkte für Reaktionen
0
Punkte
6
wie soll man dir helfen, wenn du nichts vom script preisgeben willst?
so top secret kann das ja wohl nicht sein...
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
Hi!

Da der Scriptaufruf über die Konsole nach deinen Aussagen funktioniert, kann es theoretisch ja nur an der Schreibweise von PHP liegen. Vielleicht probierst du es mal so (ungetestet)...

PHP:
shell_exec("sh /volume1/01_Synology/Scripts/Mount_Umount.sh mount movie >> /volume1/01_Synology/ProtokolleDS/Scripts/Info_Web_Server/Festplatte_Ein_Movies.log");

Tommes
 

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
384
Punkte für Reaktionen
10
Punkte
18
Wie Tommes sagt .... da das script in der Konsole läuft hat das damit recht wenig zu tun das kann eig. nur eine rechte frage sein oder eben das die Ausführung von php was damit zu tun hat....
danke dir ich werde das mal testen und melde mich wieder.


@ruedi61 das hat nichts mit Top Secret zu tun.....

EDIT: @tommes:
Rich (BBCode):
Failed to Mount USB device sds.[0x0B00 file_set_key_value.c:163] ----> das kam wieder vom System.....
Sunday 30 October 2016 - 12h:33min:00sec - Fehler bei den Parametern!!! ----> das beudetet das er die mount movie nicht erkannt hat deswegen muss das hier so sein "mount movie" das er es als eines anerkennt


shell_exec('sh /volume1/01_Synology/Scripts/Mount_Umount.sh "mount show" >> /volume1/01_Synology/ProtokolleDS/Scripts/Info_Web_Server/Festplatte_Ein_Shows.log'); 
Get /tmp/usbtab [sds] failed.[0x2000 file_get_key_value.c:108] ---> auch vom system....

das kann doch nun eig. nur noch was mit den rechten sein oder ??
weil ich ja auf System Daten zugreifen tue.... ?
 
Zuletzt bearbeitet:

ruedi61

Gesperrt
Mitglied seit
01. Apr 2016
Beiträge
72
Punkte für Reaktionen
0
Punkte
6
Kann ein Rechte Problem sein, kann ein Umgebungsvariable Problem sein, kann dran liegen, wie du den mount Befehl absetzen willst (schlussendlich als http-user)...
 

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
384
Punkte für Reaktionen
10
Punkte
18
das sind die Befehle die ich verwende für den Mount:

Rich (BBCode):
TARGET_FILE="/tmp/usbtab"
TMP_FILE="/tmp/usbtab.new"

grep -v $DEVICE_NAME_S $TARGET_FILE > $TMP_FILE

echo $DEVICE_NAME_S\=\"/proc/bus/usb/$BUSNO_S/$DEVNO_S\" >> $TMP_FILE

mv -f $TMP_FILE $TARGET_FILE

/usr/syno/bin/synousbdisk -mount $DEVICE_NAME_S

das sind die Befehle die für das Mounten benutzt werden....
das komplette script währe zu viel...
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
Und worüber läuft die PHP-Anfrage? Über die Websation vielleicht? Falls ja, dann kann das auch nicht funktionieren, das geht nur mit dem System-Apachen. Wir nutzen shell_exec selber in unseren SPK's um Shell-Scripte auszuführen welche sich in der Webstation so jedoch nicht ausführen lassen.

Tommes
 

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
384
Punkte für Reaktionen
10
Punkte
18
ja genau die PHP Anfrage kommt über ne Html seite die demnach von der WebStation kommt.

das heißt nun genau was ;) ??
das ich das so vergessen kann was ich vor hatte :( ??
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
Nicht unbedingt. Jedoch musst du dein PHP-Script als SPK zusammenbasteln und ausführen. Das ist aber nicht auf die Schnelle erklärt. Außerdem benötigst du dafür noch ein weiteres Paket (Init_3rdParty) damit du überhaupt PHP über den DSM ausführen kannst.

Was du aber machen kannst, wäre das Script über den Aufgabenplaner ausführen zu lassen. Dort kannst du Scripte auch als root ausführen. Das hat dann zwar nichts mit PHP zu tun, aber so bräuchtest du nicht immer auf die Konsole um dieses auszuführen.

Tommes
 

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
384
Punkte für Reaktionen
10
Punkte
18
okey von SPK habe ich keine Ahnung......

ja aber was genau bringt mir der aufgabenplaner ?? der führt doch nur zeitlich etwas aus ??
ist ja nicht so das ich das um die oder die Uhrzeit brauche ..... sollte ja über einen "Button" manuell sein.....
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
Ich kenne ja deine Anforderungen nicht, weshalb der Aufgabenplaner ja nur als Option erwähnt werden wollte.

Ich bin jetzt auch nicht der Super-Profi auf diesem Gebiet von daher mag es noch weitere Möglichkeiten geben, aber mir ist nur der Weg über ein SPK bekannt. Diesen zu Beschreiben würde hier jedoch den Rahmen sprengen.

Whatever... ich bzw. wir haben es aber auch geschafft, ein SPK zu bauen. Der Weg ist das Ziel... also nicht kleckern. Klotzen!

Tommes
 
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