2010-11-24 138 views
0

我有一个在tomcat6中运行的servlet。我使用下面的代码来执行命令 ubuntu Runtime.getRuntime()。exec(“/ usr/bin/wine cmd/c some.vbs”); 问题是tomcat6运行程序为“tomcat6”用户,上面的java命令为 。所以上面的命令getErrorStream返回为 “wine:/home/randeel/.wine不属于你” 我已经使用用户“randeel”安装了“wine”。 有没有解决这个问题的方法?java - 在linux中执行命令

谢谢, Rana。

+1

如果你这样做“chmod a + rwx /home/randeel/.wine”它有效吗? – PeterMmm 2010-11-24 08:53:19

回答

2

是:您必须切换用户。尝试

Runtime.getRuntime().exec("sudo -U randeel /usr/bin/wine cmd /c some.vbs"); 

注意sudo会要求输入密码,除非您配置它,否则。

另一个更优雅的解决方案是运行一个小型服务器,如randeel,它等待网络连接。然后运行该命令并通过网络连接返回输出。请参阅java.net.Socket的文档。

+0

嗨,当我执行此命令“sudo -l -U randeel/usr/bin/wine cmd/c some.vbs”时,我得到输出为文本“/ usr/bin/wine cmd/c some.vbs”任何解决方案到那个?程序没有运行。我改变了sudoers,要求没有passwd。 – rana123 2010-11-24 10:44:12

0

您有2个解决方案。 1.使用chmod a + x为wine提供适当的执行权限。 2.如果您不想执行#1,则必须运行首先更改用户然后运行应用程序的命令行。 命令su用户名 更改当前用户,但需要输入密码。要模拟输入密码的终端,您可以使用expect脚本。

然后你可以以不同的用户运行命令。如果你打算使用这种方式,我建议你写一个简短的shell脚本来完成这两个动作并从java运行这个脚本。

#2更复杂。方式#1似乎更简单。