如何从java代码中调用shell脚本作为工程用户

时间:2014-07-02 13:12:42

标签: java

  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代码

1 个答案:

答案 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等),如果你不需要输出,它会为你运行支付文件生成器脚本。