final String[] cmdArray = {
"/bin/bash", "/var/tmp/invoke_payment_files_generator.sh",
String.valueOf(paymentBatchId)
};
final ProcessBuilder processBuilder = new ProcessBuilder(cmdArray);
processBuilder.redirectErrorStream(true);
上面的代码对我有用,但他们是一种调用这个shell脚本作为工程用户而不是java代码中的unix用户的方法。任何人都可以建议方式,任何人都可以建议如何知道调用哪个用户shell脚本来自java代码
答案 0 :(得分:0)
您可以使用sudo以另一个用户身份运行脚本。如果路径已修复,只需将其添加到您的sudoers文件中:
<jvmuser> ALL=(<execuser>) NOPASSWD: "/bin/bash /var/tmp/invoke_payment_files_generator.sh"
替换shelluser并与运行java命令的用户一起使用。
然后修改你的java shell命令来运行它:
sudo -u <execuser> /bin/bash /var/tmp/invoke_payment_files_generator.sh
这是未经测试的,可能需要一些调整,但总体思路应该可以正常工作。
另一种方法是调用API(unix域套接字,web-servlet,文件,sql队列表,rpc等),如果你不需要输出,它会为你运行支付文件生成器脚本。