Binäre Datei, die nicht ausgeführt, für web-Benutzer

Ich habe ein php-Skript erstellt eine shell-Skript-Datei, die schließlich führt, wie der www-data Benutzer, alle Befehle werden ausgeführt, mit Ausnahme der letzten, welche impliziert eine binäre Datei. Wenn ich den Befehl ausführen als root, es läuft ok...

Dies ist der Letzte Teil des Skripts:

&& echo "Tokenizing the file........" >> Logs/table_of_contents.php \
&& perl ../common/Scripts/xmltokenize.pl --filename=xmlfiles/table_of_contents.xml >> Logs/table_of_contents.php \
&& perl ../common/Scripts/xmlrenumber.pl --filename=xmlfiles/table_of_contents.xml >> Logs/table_of_contents.php \
&& echo "Tagging the file........" >> Logs/table_of_contents.php \

# I have added this line to check if it helps but id doesn't
&& export HOME="/tmp/" \

# And this is the command that calls the binary file
&& perl tagfile.pl xmlfiles/table_of_contents.xml \

Hier haben Sie die Inhalte des tagfile.pl

use File::Find;
$\ = "\n";

$fn = shift;

if ( $fn =~ /([^\/\.]+)\.xml/ ) { $fileid = $1; } else { exit;};
print $fileid;

$cmd = "perl tagfl2/makevrt.pl 'xmlfiles/$fileid.xml' > 'tagtmp/$fileid.vrt'";
print $cmd;
print `$cmd`;

#ALL OF THE PREVIOUS WORKS
#THIS IS THE ONE THAT GIVES PERMISSION ERRORS 
# OF COURSE: "www-data:www-data tagtmp/" and "www-data:www-data $fileid.vrt = table_of_contents.vrt"
$cmd = "cut -f 1 tagtmp/'$fileid.vrt' | tagfl2/treetagger/bin/tree-tagger -no-unknown -token -lemma tagfl2/treetagger/lib/english.par  > 'tagtmp/$fileid.tagged'";
print $cmd;
`$cmd`;
$cmd = "perl tagfl2/mrg.pl 'tagtmp/$fileid.vrt' 'tagtmp/$fileid.tagged' > 'tagtmp/$fileid.mrg'";
print $cmd;
`$cmd`;
$cmd = "perl tagfl2/tagxml.pl 'tagtmp/$fileid.mrg' 'xmlfiles/$fileid.xml'";
print $cmd;
`$cmd`;

Hier ist der Fehler:

sh: 1: tagfl2/treetagger/bin/tree-tagger: Permission denied

Auch, nur für den Fall:

chown -R www-data:www-data tagfl2/
chmod -R g+rwx tagfl2/

1 Antworten

  • Николай Лубышев
    4. Mai 2019

    Versuchen zu definieren, einen vollständigen Pfad zu dem Skript

    $cmd = "perl /[full_path]/makevrt.pl 'xmlfiles/$fileid.xml' > 'tagtmp/$fileid.vrt'";