2017-11-13 17 views
3

からスクリプトでLinuxの "AWK" コマンドを実行することはできませんは、私はシェルスクリプト "test.sh" を持っているPHP

exec("su -c sh /path/to/my/script/test.sh"); 

私はこの出力を得た:

Using awk: 
Using cut: 6512 

のでコマンドは、私はPHPからスクリプトを実行すると作業が、「AWK」コマンドがないですが、私はターミナルからそれを実行すると、「カット」:

# sh test.sh 

awkとカットの両方をうまく処理できます。これは "ps"の出力のように見えます:

USER  PID PPID VSIZE RSS WCHAN  PC   NAME 
root  6512 5115 3044 1108 poll_sched b6e4bb0c S logcat 

私は何かを逃しましたか?

答えて

1

あなたはあなたが私はPHPから スクリプトを実行するときにコマンドが動作しますが、「AWK」コマンドである「カット」しません

を言ったが、どのようにデバッグ最初

学ぶべきですターミナルから実行したとき:

どのようにすればいいですか?

は実際に

$ php -r 'exec("su -c sh /path/to/my/script/test.sh");' 
su: user /path/to/my/script/test.sh does not exist 

あなたは構文の下の最初の必要性のコードに

// basic : stdin (0) stdout (1) stderr (2) 

exec('your_command 2>&1', $output, $return_status); 

// to see the response from your command 
// su: user /path/to/my/script/test.sh does not exist 
print_r($output); 

をデバッグ中に覚えているCLIで、以下のようなエラーがスローされます

  • suはroot権限を与えますが、PATH変数と現在の作業ディレクトリは変更されません。

  • オペレーティングシステムは、ユーザ名が存在しない場合には、 ユーザがrootセッションに変更したい、ということを前提とし、これによりユーザーはrootパスワードのための

[[email protected] Desktop]$ su 
Password: 
[[email protected] Desktop]# pwd 
/home/akshay/Desktop 
[[email protected] Desktop]# exit 
exit 

[[email protected] Desktop]$ su - 
Password: 
[[email protected] ~]# pwd 
/root 
を促しています

ソリューション:

あなたは(を使用しないパスワードプロンプトなしでスクリプトを実行可能にするべきですあなたは/etc/sudoers

# which awk => give you awk path 
# same use in your script also, or else set path variable 
www-data ALL=NOPASSWD: /path/to/my/script/test.sh, /bin/cut, /usr/bin/awk 

に以下のようなエントリを作成することがApacheのユーザーがあなたのスクリプトといくつかのコマンドを実行できるようにする使用sudo

だから、それは次のようになります。返信用

// assuming your script is executable 
exec("sudo /path/to/my/script/test.sh 2>&1", $output); 
print_r($output); 
+0

おかげで、出力$ outputと$ return_statusはそれぞれ "Array"と "0"であり、問​​題がないことを意味します。私はAndroid Linux(私はSSHelperアプリケーションでアンドロイドにssh)を使用していることを言及するのを忘れていました。 PHPの場合、私はKSWEBアプリを使用しています。 –

関連する問題