2016-11-03 15 views
0

私はbashスクリプトで作業しています。sudo -u(user)cmdがbashスクリプトで動作しない

このbashスクリプトは、sudo -u (B) cmdを使用してコマンドを実行する必要があります。

は、私は私がすべての私のコマンドが宣言している私の/etc/sudoersにユーザA

を使用して、このスクリプトを実行します。

私はターミナルを使用してそれを実行すると問題はありません。

私はTomcatサーバーでJavaプログラムを使用して実行すると間違いがあります。私は私のJavaプログラムから私のスクリプトを実行する方法

:(ターミナルまたはJavaプログラム)の両方で

command = "/path/my-script.sh arg1" 

private String executeCommand(String command) { 

     StringBuffer output = new StringBuffer(); 

     Process p; 
     try { 
      p = Runtime.getRuntime().exec(command); 
      p.waitFor(); 
      BufferedReader reader = 
        new BufferedReader(new InputStreamReader(p.getInputStream())); 

      String line = ""; 
      while ((line = reader.readLine())!= null) { 
       output.append(line + "\n"); 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return output.toString(); 

} 

を私はそれらのコマンドを実行する場合:

user=$(whoami) 
echo "[INFO]: user = $user" 

結果:[INFO]: user = A

mkdircmd=$(sudo -u B mkdir -p $project_path) 
return_mkdircmd=$? 

echo "[INFO]: mkdircmd: $mkdircmd/return mkdircmd: $return_mkdircmd" 

cpcmd=$(sudo -u B cp $file_path $project_path) 
return_cpcmd=$? 


echo "[INFO]: cpcmd: $cpcmd/return cpcmd: $return_cpcmd" 

結果:

ターミナルは、スクリプトを実行すると、スクリプト

[INFO]: mkdircmd:/return mkdircmd: 1 
[INFO]: cpcmd:/return cpcmd: 1 

を実行してTomcatサーバー(./myscript)

[INFO]: mkdircmd:/return mkdircmd: 0 
[INFO]: cpcmd:/return cpcmd: 0 

を持つ人は、私の問題になることができる場所を把握するために私を助けることができますか?

おかげで

+0

tomcatサーバーはユーザーID Aで稼働していますか?それが別のユーザーとして実行されている場合、sudoersファイルはパスワードなしのsudoを実行できない可能性があります。ちょっとした考え。 – Hannu

+0

私は** whoami **コマンドを実行していますので、結果は** A ** – VinceDMG

+0

です。 'sudo'を呼び出すときに入力する必要があるパスワードがユーザーAにありますか?すでにパスワードを提供しており、そのセッションでキャッシュされているため、コマンドラインで実行されている可能性があります。新しいシェルセッションを開き、 'sudo'で同じスクリプトを実行してみてください(または' sudo -k'を実行してスクリプトを再実行してください)。 –

答えて

0

sudo su - tomcat 

(TomcatはTomcatのユーザーを使用して実行されているとすると)Tomcatに問題が変更ユーザーをデバッグするには、コマンドを実行します。すべてのエラーのため

sudo -u B (cmd) 

デバッグを。 tomcatを使用して、を/etc/passwdsu/bin/bashに更新する必要があります。

関連する問題