私は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
を持つ人は、私の問題になることができる場所を把握するために私を助けることができますか?
おかげで
tomcatサーバーはユーザーID Aで稼働していますか?それが別のユーザーとして実行されている場合、sudoersファイルはパスワードなしのsudoを実行できない可能性があります。ちょっとした考え。 – Hannu
私は** whoami **コマンドを実行していますので、結果は** A ** – VinceDMG
です。 'sudo'を呼び出すときに入力する必要があるパスワードがユーザーAにありますか?すでにパスワードを提供しており、そのセッションでキャッシュされているため、コマンドラインで実行されている可能性があります。新しいシェルセッションを開き、 'sudo'で同じスクリプトを実行してみてください(または' sudo -k'を実行してスクリプトを再実行してください)。 –