1

CentOS Linux を含む ISO イメージと、それと一緒に構築された企業アプリケーションを作成するコマンドを非技術者が簡単に作成して実行できるようにするためのフォーム (JavaScript、jQuery、PHP、および HTML を使用) を作成しました。サンプル変数を使用した実際のコマンドを次に示します。

./test.pl --verbose --output tvmTEST.iso --virtual --isv 4.1.5.1.4147.8.0  --64bit --netproto static --hostname tvmTEST --address 192.168.5.235 --netmask 255.255.255.0 --gateway 192.168.5.252 --nameserver 192.168.5.21,192.168.5.2

この正確なコマンドは、root としてログインし、ISO が正常に作成されているときにシェルから起動すると正しく機能します。ただし、GUI では機能しません。フォームはコマンドを適切に構成し、perl プログラムを呼び出している PHP コードに渡します。PHP プログラムで構成されたコマンドをシェルでテストしたところ、ISO が作成されました。ISO イメージをビルドするperl プログラムを次に示します。フォームから起動すると、ユーザー apache として実行されます。しかし、次のように記述されている 665 行目で停止します。

system("sudo mount -o loop $c{centosiso} $mp") and die;

上記に渡された文字列を印刷しようとしましたが、system()印刷されました:

sudo mount -o loop /tmp/test.pl-cache/CentOS-5.4-x86_64-bin-1of7.iso /mnt/CentOS

そこで、シェルからこのコマンドを実行してみたところ、実際に ISO がマウントされました! ただし、 の権限は に/mnt/CentOS変更されました755。なぜ私には明らかではないのですか?上記の行の有無にかかわらずテストしたことに注意してくださいsudo

そして、これに先立って、 のパーミッションは/mnt/CentOSに設定され777、所有者はapache!に設定されました。これらの権限がフォームが機能しない理由ですか? 私は正しい軌道に乗っていますか?

4

1 に答える 1

1

qx( … )システム関数を使用する代わりに、コマンドを回避して使用することもできます。

この演算子は、Perlにコマンドをシェルで実行するように指示します。system同じコマンドをで実行すると失敗することがありましたqx

私は、システムコマンドが頑固である理由を見つけようとするよりもその解決策を好みました。

1つの優れた違いは、whilesystemがコマンドの終了値をqx返し、コマンドの出力を返すため、結果を変数に割り当てて、デバッグ目的で出力できることです。

于 2012-08-17T04:35:35.660 に答える