我正在使用bash脚本。
此bash脚本必须使用sudo -u (B) cmd
运行命令。
我使用用户A执行此脚本。
在我的/etc/sudoers
中,我宣布了所有命令。
当我使用终端执行它时,一切都很好。
当我在tomcat服务器中使用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();
}
在(终端或Java程序)的情况下,我执行这些命令:
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"
结果:
使用Tomcat服务器执行脚本
[INFO]: mkdircmd: / return mkdircmd: 1
[INFO]: cpcmd: / return cpcmd: 1
终端执行脚本(./myscript)
[INFO]: mkdircmd: / return mkdircmd: 0
[INFO]: cpcmd: / return cpcmd: 0
有人可以帮我弄清楚我的问题在哪里?
由于
答案 0 :(得分:0)
调试问题将用户更改为tomcat(假设tomcat使用tomcat用户运行)
sudo su - tomcat
执行命令:
sudo -u B (cmd)
调试任何错误。您可能需要使用tomcat将/sbin/nologin
中的/bin/bash
/etc/passwd
更新为su
。