Perl - Skript wird nicht ausgeführt

Status
Für weitere Antworten geschlossen.

LiquidForce

Benutzer
Mitglied seit
27. Jun 2014
Beiträge
12
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen

Ich kann VBA relativ gut, Javascript und LUA ein bisschen programmieren. Ich möchte nun in PERL einsteigen, weil ich das für mein Intranet auf der Synology benötige. In Sachen Kommandozeile bin ich etwas neu, aber aus alten Atari sieht das doch etwas familiär aus :)

Ausgangslage:
- Es läuft DSM 5.0-4493 Update 2
- Im Paketzentrum "Perl 5.18.1-0012" installiert
- Im Ordner "www" meines Benutzers "intranet" einen Ordner "cgi-bin" angelegt
- Eine Textdatei "firstscript.pl" angelegt mit dem Inhalt:
#!/usr/bin/perl -wT
print "Content-type: text/html\n\n";
print "Hello, world!\n";

- Im Terminal in den Ordner gewechselt "chdir /volume1/homes/intranet/www/cgi-bin/"
- Die Datei exekutierbar gemacht "chmod 755 firstscript.pl"

Im Browser wird jetzt aber beim Aufruf

http://10.0.x.xx/~intranet/cgi-bin/firstscript.pl

der Inhalt der Textdatei angezeigt, also wird das Skript nicht ausgeführt.

Was mache ich falsch? Im Terminal ergibt die Eingabe "which perl" die Antwort "usr/bin/perl", scheint ok zu sein?

Vielen Dank und Grüsse
LF
 

LiquidForce

Benutzer
Mitglied seit
27. Jun 2014
Beiträge
12
Punkte für Reaktionen
0
Punkte
0
Lösung

Ich habe es gelöst, es braucht also nach der Installation von "Perl" im Paketzentrum" ein paar Sachen im Terminal

1.) Der Ordner www/cgi-bin/ habe ich auch mit chmod 755 geändert, habe ich irgendwo gelesen, weiss aber nicht, ob zwingend nötig
2.) Die Apache Konfigurations Datei ist unter DSM 5 nicht mehr unter "usr/syno/apache" sondern unter "etc/httpd"
3.) Die httpd.conf-user Datei muss modifiziert werden, aber vorher machte ich mit "cp http.conf-user http.conf-user_original" ein Backup. WICHTIG: Nicht die "http.confd" Datei verändern, sondern die "httpd.conf-user" Datei!
4.) Dann mit "vi httpd.conf-user" in den Edit-Modus (wie bedienen steht im Wiki)
5.) Im Block <IfModule mime_module> habe ich der Zeile "AddHandler cgi-script cgi" ein " pl" hinzugefügt, damit auch .pl Dateien ausgeführt werden. Die Zeile heisst dann also "AddHandler cgi-script cgi pl"
6.) Nachstehenden Directory Block einfügen, wobei "benutzer_name" natürich durch den konkreten user ersetzt werden muss

Rich (BBCode):
<Directory "/volume1/homes/benutzer_name/www">               
    Options ExecCGI                                     
    AllowOverride None                                  
    Order allow,deny                                    
    Allow from all                                      
</Directory>

7.) Die Datei speichern und verlassen :)wq)
8.) Den Apache User neu starten: Im Terminal
Rich (BBCode):
/usr/syno/sbin/synoservicecfg --restart httpd-user
eingeben und enter drücken. Kommt keine Fehlermeldung, dann ist alles gut, und die Skripte sollten laufen!

Das Gerät ist eine RS812+

Gruss
dmy
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.694
Punkte für Reaktionen
2.101
Punkte
829
Zu Punkt 3: Die Idee mit dem Backup ist sehr gut. Nimm aber besser cp -ip. Option i sorgt für eine Nachfrage, falls es die Zieldatei schon gibt. Option p übernimmt Eigentümer, Gruppe und Rechte von der Quelldatei.
 

LiquidForce

Benutzer
Mitglied seit
27. Jun 2014
Beiträge
12
Punkte für Reaktionen
0
Punkte
0
Danke für den Hinweis. :)

Jetzt noch ein Problem:

Wie greife ich aus der www/cgi-bin/xy.pl Datei auf einen Ordner unter "volume1" zu?

Rich (BBCode):
my $file = '/volume1/KNX_Log/2014-07-01.csv';
open(my $data, '<', $file) or die "Could not open '$file' $!\n";

print "***" . $data;

geht nicht

Rich (BBCode):
my $file = '../2014-07-01.csv';
open(my $data, '<', $file) or die "Could not open '$file' $!\n";

print "***" . $data;

schon, aber dann muss die Datei im www Ordner des Benutzers liegen und genau das möchte ich umgehen. Ich dachte mit Perl kann man auf das ganze Volume1 zugreifen?
 

LiquidForce

Benutzer
Mitglied seit
27. Jun 2014
Beiträge
12
Punkte für Reaktionen
0
Punkte
0
Hm. Als root im Terminal geht es. Also liegt es an der Berechtigung. Muss dies auch in die httpd.conf-user Datei? Und wenn ja, was denn genau?

Rich (BBCode):
<Directory "/volume1/KNX_Log">                    
    Options ExecCGI                               
    AllowOverride None                            
    Order allow,deny                              
    Allow from all                                
</Directory>

geht schon mal nicht, aber das "Options ExecCGI" macht vermutlich nicht viel Sinn.

Jemand eine Idee, wie ich das lösen kann? Wenn die httpd.conf-user Datei überhaupt der richtige Weg ist. In der DSM hat der Benutzer, aus dessen persönlicher Website das Perl Skript ausgeführt wird, Zugriff auf den Ordner, wo die Datei liegt.

Danke und Gruss
dmy
 
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