【发布时间】:2012-09-03 10:55:51
【问题描述】:
我正在尝试使用运行时 exec 从 servlet 运行 psservice.exe 和 plink.exe。它将用于在运行 windows 和 unix aix 的远程计算机上启动或停止服务。
我已经设置了系统变量,以便能够从命令提示符运行它们。这些命令在命令提示符和 java 程序中完美运行
我在远程 Windows 机器的 Servlet 中使用以下代码
Runtime.getRuntime().exec(serverPropLoader.getServerProperties("psservice \\\\172.xx.xx.xx -u username -p password stop MySQL"));
我在 Servlets 中为远程 unix aix 5.3 机器使用以下代码
Runtime.getRuntime().exec(serverPropLoader.getServerProperties("PLINK.exe -ssh -pw "password" username@172.xx.xx.xx /home/mysql/stopservice.sh"));
以下是我的观察:
如果我使用 Tomcat6 从 Eclipse(版本 3.4.2)运行上述语句,它运行得非常好,但是如果将我的 Web 应用程序导出为 WAR 并手动将其部署到 Tomcat6 中,它不会运行。 (我已经尝试在我的和其他系统中部署它)
我尝试将这些命令放入批处理文件并从 servlet 调用它,但没有成功。从批处理文件“net”和“sc”命令正在运行,但我无法运行 pservice 和 plink 命令。 “sc”命令也仅适用于本地进程。
执行 servlet 后,我可以在 Windows 任务管理器中看到 psservice.exe 和 plink.exe,但本地和远程系统上所需的服务没有启动/停止
【问题讨论】:
-
我找到了解决上述问题的方法:现在我正在创建一个新文件,其名称为要启动\停止的服务。我编写了另一个 java 程序,它将读取文件名并启动或停止所需的服务。
-
我觉得这个问题与 tomcat 中的 catalina.policy 或 windows 用户权限有关,因为我能够从普通 java 程序运行 Runtime.getRuntime().exec() 但不能从部署的 servlet在tomcat中。另一个奇怪的事情是我能够从 eclipse 运行 servlet。
标签: java servlets tomcat6 runtime.exec plink