Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]3201[/thread]

system und mod_perl?

Leser: 1


<< |< 1 2 3 >| >> 28 Einträge, 3 Seiten
bsnoop
 2006-04-01 01:24
#29993 #29993
User since
2006-03-30
25 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich habe nun schon ne ganze Weile gesucht aber nix gefunden.

Folgendes Problem:

1. ich bin mod_perl newbie ;)

2. auf dem webserver ist das Verzechnis 'xyz' konfiguriert für mod_perl. In einem Skript in diesem Verzeichnis möchte ich jetzt einen system-Befehl absetzen mit dem ich zwei mp3-Files (die im selben Verzeichnis liegen) zu einem Verbinde mittels mp3cat:
Code: (dl )
system('mp3cat --output=drei.mp3 eins.mp3 zwei.mp3');

Das funktioniert nicht. Im cgi-bin Verzeichnis (kein mod_perl) funktioniert das.

Funktioniert sowas unter mod_perl aus irgendwelchen Gründen nicht oder mache ich da irgendwas falsch?

Vielen Dank schon mal!
ptk
 2006-04-01 01:33
#29994 #29994
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Grundsätzlich funktioniert system() auch unter mod_perl. Vielleicht ist dein $ENV{PATH} falsch?
bsnoop
 2006-04-01 01:47
#29995 #29995
User since
2006-03-30
25 Artikel
BenutzerIn
[default_avatar]
Vielen Dank! Wenn ich $ENV{'PATH'} ausgeben lasse dann erhalte ich folgendes:

mod_perl skript:
Code: (dl )
1
2
3
4
5
/usr/local/sbin
/sbin
/bin
/usr/sbin
/usr/bin


cgi skript:
Code: (dl )
1
2
3
/usr/local/bin
/usr/bin
/bin


Bei dem mod_perl skript fehlt ihm Gegensatz zum cgi das /usr/local/bin

Dann liegt das also u.U. daran? Wie kann ich das denn hinbiegen?

--- Nachtrag

Gerade eben kam ich auf die Idee mal zu gucken wo das Programm mp3cat überhaupt liegt. Das liegt in

/usr/bin

was im Pfad beim mod_perl Skript mit drin steht.

auch das benutzen des kompletten Pfades zu den MP3 Dateien bringt nix.\n\n

<!--EDIT|bsnoop|1143853262-->
ptk
 2006-04-01 16:02
#29996 #29996
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Vielleicht ist mp3cat nur ein Skript/Programm, das weitere Programme aufruft? Versuch's mal doch mit dem Setzen vonl $ENV{PATH}. Hast du Fehlermeldungen im errorlog? Was ist der Statuscode nach dem system-Aufruf?
GwenDragon
 2006-04-01 17:58
#29997 #29997
User since
2005-01-17
14600 Artikel
Admin1
[Homepage]
user image
1. Alle Pfade angeben!
2. Es ist sicherer [font=courier new]system[/font] mit mehreren Parametern auf zu rufen (Perl Kochbuch, Kap. 19.6)
Code: (dl )
system('/usr/bin/mp3cat', '--output=/Pfad/zum/Verzeichnis/drei.mp3', '/Pfad/zum/Verzeichnis/eins.mp3', '/Pfad/zum/Verzeichnis/zwei.mp3');
\n\n

<!--EDIT|GwenDragon|1143900462-->
bsnoop
 2006-04-01 18:15
#29998 #29998
User since
2006-03-30
25 Artikel
BenutzerIn
[default_avatar]
Mit dem erweitern von $ENV{PATH} funktioniert das auch nicht. Da muss ich allerdings auch noch mal ganz blöd fragen, ich hänge an $ENV{PATH} einfach noch das eine fehlende Verzeichnis ran. Das ist doch dann ok so oder?

Wenn ich den system-Aufruf ändere zu
Code: (dl )
system('mp3cat --output=drei.mp3 eins.mp3 zwei.mp3') == 0 || die "$! | $?";


dann kommen mehr oder weniger abwechselnd folgende Meldungen:
Code: (dl )
1
2
3
No child processes | 3328 
Bad file descriptor | 3328
Inappropriate ioctl for device | 3328


Im Errorlog steht dann dasselbe drin. Wenn ich den system Befehl ohne 'die' verwende tut sich auch im Errorlog nix.

Ich habe es auch mal ersatzweise mit einem anderen einfachen system-call versucht:
Code: (dl )
system('ls') == 0 || die "$! | $?";


Das produziert die gleichen Fehlermeldungen, lediglich $? hat dort einen anderen Wert (256). Allerdings läuft das manchmal auch ohne Fehlermeldung durch.

Irgendwie peile ich da gerade nix mehr...
bsnoop
 2006-04-01 18:16
#29999 #29999
User since
2006-03-30
25 Artikel
BenutzerIn
[default_avatar]
Hallo GwenDragon,

das hat sich gerade mit dem bauen meines Posts überschnitten, ich werde das gleich mal ausprobieren! Vielen Dank!
ptk
 2006-04-01 18:46
#30000 #30000
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Die Tipps von GwenDragon werden dir hier aber nicht weiter helfen.

$! brauchst du bei system() nicht abzufragen, der Wert dort ist irrelevant (es sei denn, -1 wird zurückgegeben).

Der Wert 3328 ist interessanter. Das teilt sich auf in Rückgabewert=0 und Signal=13. Das wäre auf meinem Betriebssystem SIGPIPE, bei dir müsstest du gucken.

Du kannst vor mp3cat strace hinzufügen, dann bekommst du noch viel mehr Informationen.
ptk
 2006-04-01 18:49
#30001 #30001
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Anhängen von Pfaden an $ENV{PATH}:
Code: (dl )
$ENV{PATH} .= ":/neuer/pfad";

Also den Doppelpunkt (nur Unix) nicht vergessen. Insbesondere unter mod_perl empfiehlt es sich, die Änderung per local lokal zu halten.
bsnoop
 2006-04-01 19:01
#30002 #30002
User since
2006-03-30
25 Artikel
BenutzerIn
[default_avatar]
Also mit dem auschreiben aller Pfade hat auch nix gebracht.

strace? damit kann mein Server irgendwie nix anfangen...

Den PATH hatte ich so versucht zu erweitern:
Code: (dl )
$ENV{'PATH'} = "/usr/local/bin:".$ENV{'PATH'};


Quote
Der Wert 3328 ist interessanter. Das teilt sich auf in Rückgabewert=0 und Signal=13. Das wäre auf meinem Betriebssystem SIGPIPE, bei dir müsstest du gucken.


und das geht wie?

So langsam nervt das! ;)
<< |< 1 2 3 >| >> 28 Einträge, 3 Seiten



View all threads created 2006-04-01 01:24.