有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

servlets java在linux中执行命令

我在tomcat6中运行了一个servlet。我使用以下代码在中执行命令 ubuntu 运行时。getRuntime()。exec(“/usr/bin/wine cmd/c some.vbs”); 问题是tomcat6以“tomcat6”用户的身份运行程序 上面的java命令。因此,上述命令getErrorStream返回为 “葡萄酒:/home/randeel/。葡萄酒不属于您” 我已经使用用户“randeel”安装了“wine”。 有解决办法吗

谢谢,, 拉纳


共 (2) 个答案

  1. # 1 楼答案

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

    然后,您可以作为不同的用户运行该命令。如果您打算使用这种方式,我建议您编写执行这两个操作的简短shell脚本,并从java运行该脚本

    #2更为复杂。方法1似乎简单得多

  2. # 2 楼答案

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

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

    请注意,sudo将要求输入密码,除非您另行配置密码

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