Schrift
[thread]480[/thread]

system() führt befehl nicht aus !?

Leser: 2


<< |< 1 2 3 >| >> 25 Einträge, 3 Seiten
Gast Gast
 2005-04-19 16:53
#4831 #4831
hi,
ich wollte mir ein kleines perl programm schreiben, dass daten aus einem webformular nimmt, damit eine tex datei vervollständigt und schließlich in ein pdf umwandelt.

alles eigentlich gar kein problem, aber wenn ich
Code (perl): (dl )
my $status = system("pdflatex /home/testuser/test.tex");

oder
Code (perl): (dl )
my $status = system("pdflatex","/home/testuser/test.tex");

eingebe erhalte ich immer nen rückgabewert von 256 (ich glaub man muss ihn ja durch 256 teilen um den richtigen rauszubekommen also in dem fall 1 oder?).

auf jeden fall funktioniert der befehl, wenn ich ihn direkt in die shell eingebe, einwandfrei.

hat jemand ne ahnung woran das liegen könnte?

danke
gruß
darkie
Taulmarill
 2005-04-19 17:17
#4832 #4832
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
wenn eine fehlermeldung vorliegt, müsste diese in $! oder $? stehen. vergleiche auch perldoc -f system.
ansonsten versuch mal den befehl mit absolutem pfad anzugeben.\n\n

<!--EDIT|Taulmarill|1113916900-->
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Ronnie
 2005-04-19 18:27
#4833 #4833
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Womöglich hast du ja ein ganz triviales Rechteproblem, wie z.B. das der Webserver an der betreffenden Stelle keine Dateien erzeugen darf.

Teste mal, ob du per su als Web-Server das Skript auf der Shell ausführen darfst? Du kannst per su nobody oder su www-data dich in die Lage des Webservers versetzen. Mit STRG+D kehrst du in den normalen kontext zurück.\n\n

<!--EDIT|Ronnie|1113920976-->
darkie23
 2005-04-19 18:33
#4834 #4834
User since
2005-04-19
14 Artikel
BenutzerIn
[default_avatar]
also ich hab mal den absoluten pfad angegeben, aber der fehler ist geblieben. dann ahb ich mir mal die datei pdflatex angeschaut und gesehen, dass es ein link auf pdfetex ist. hab mir gedacht, dass das vielleicht nen fehler verursachen könnte und hab direkt pdfetex aufgerufen

Code (perl): (dl )
my $status = system("pdfetex -f /home/testuser/test.tex");


das geht in der konsole perfekt... in perl wieder nicht. $? beinhaltet übrigens nur den rückgabewert 1. hab auch mal das kleine skript von perdoc -f system drübergejagdt das ergab:

Code: (dl )
child exited with value 1


naja jetzt die nächste möglichkeit bzw. frage. mein system aufruf gehört zu einem perl modul, dass ich via apache und mod_perl auf nem webserver laufen habe. wie siehts denn da mit den rechten aus? das ist meines erachtens wahrscheinlich der knackpunkt oder? ein einfaches ls geht nämlich... vielleicht kennt sich jemand aus, welche rechte das modul hat, wenn es compiliert ist bzw. wie man diese ändern kann.

danke
gruß
darkie

edit 1: hab eben erst gesehen, dass sich mein beitrag mit dem hinweis von ronnie überschnitten hat... werds gleich ausprobieren... wahrscheinlich liegts nämlich daran...
Taulmarill
 2005-04-19 18:35
#4835 #4835
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
das modul hat die selben rechte wie der webserver. warscheinlich läuft ein master httpd als root und dessen childs als nobody, www-data, etc. und genau mit den rechten dieses nicht-root-users laufen auch deine module.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Crian
 2005-04-19 18:49
#4836 #4836
User since
2003-08-04
5867 Artikel
ModeratorIn
[Homepage]
user image
Code: (dl )
1
2
3
@args = ("command", "arg1", "arg2");
system(@args) == 0
or die "system @args failed: $?"


(aus perldoc -f system)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
darkie23
 2005-04-19 18:51
#4837 #4837
User since
2005-04-19
14 Artikel
BenutzerIn
[default_avatar]
jep, genau da liegt das prob. hab grad nachgeschaut: ein apache rennt als root die anderen unter www-data als child und als www-data konnte ich direkt über die konsole den befehl auch nicht ausführen... also kein wunder, dass es perl nicht konnte.

ich schau jetzt mal, wie ich dem kleinen www-data nen ordner freigebe. wenn das jemand von euch schon direkt im kopf hat oder ne gute lösung dafür kennt, kann er ja bescheid sagen.

ansonsten tausend dank an euch.

@crian: danke für den hinweis, aber das ist im endeffekt ja nur ein bißchen ne andere form system() aufzurufen und ändert leider nicht mein problem.
Ronnie
 2005-04-19 18:57
#4838 #4838
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
chown www-data folder/ wäre ein Weg, der andere wäre sudo zu verwenden.
darkie23
 2005-04-19 19:05
#4839 #4839
User since
2005-04-19
14 Artikel
BenutzerIn
[default_avatar]
danke, habs mit chown und chgrp gemacht.
darkie23
 2005-04-19 19:19
#4840 #4840
User since
2005-04-19
14 Artikel
BenutzerIn
[default_avatar]
sodele jungs und mädels ab in die nächste runde:

ich hab die rechte des ordners (und auch mal notfalls die der datei) auf den benutzer www-data überführt. damit kann ich den befehl

Code: (dl )
/usr/bin/pdflatex /var/www/latex/test.tex


problemlos als www-data in der konsole ausführen und das gewünschte pdf wird erzeugt. allerdings funktioniert der system aufruf über perl immer noch nicht.

Code (perl): (dl )
my $result = system("/usr/bin/pdflatex /var/www/latex/test.tex");


$result bzw. $? enthält immer noch 256 bzw. 1 als rückgabewert und es wird keine pdf erzeugt... bin leider am verzweifeln. hat jemand noch ne idee?
<< |< 1 2 3 >| >> 25 Einträge, 3 Seiten



View all threads created 2005-04-19 16:53.