0

我正在尝试通过以下代码(CentOS 机器顺便说一句)执行 sh 文件

Runtime.getRuntime().exec("sh " + file.getPath());

我将此代码用于Windows,它工作正常

Runtime.getRuntime().exec("cmd /c start " + file.getPath());

可能是因为我在 .sh 文件中使用了 Screen 吗?我也在使用 java 命令来启动服务器,所以也许我需要包括这些?

这是sh文件的内容

#!/bin/sh
BINDIR=$(dirname "$(readlink -fn "$0")")
cd "$BINDIR"
screen -S PrivateServer java -Xms2048M -Xmx2048M -jar somejar.jar -o true

我也在从关闭挂钩运行此代码,这可能是问题吗?这是因为该软件是一个游戏服务器,它的目的是让用户可以使用重启命令或让它自动重启,而无需自己设置任何东西。

编辑:我决定将错误输出到一个文本文件,发现这个“必须连接到终端”。有任何想法吗?我相信这是与使用屏幕有关的问题。

4

4 回答 4

1

由于您确认该文件具有可执行权限,因此请尝试按如下方式传递参数:

Runtime.getRuntime().exec(new String[]{"/bin/sh" ,"-c", file.getPath()});

所以主要提供完整的路径供sh使用-c

于 2013-02-21T21:46:52.620 回答
0

哟需要设置操作的权限,通常“sh”文件需要执行权限才能从Java应用程序运行这个脚本。您必须以 root (sudo su) 或 sudo java -jar 身份运行 Java 应用程序。或者设置对您的脚本“sudo chmod 777 ...”的完全访问权限,不是完全访问权限,但对于任何想要执行您的脚本的用户来说至少是 chmod +x。

最好的祝福。

于 2013-02-20T18:59:57.760 回答
0

我建议使用 org.apache.commons.exec.* 来运行此类。

于 2013-02-20T19:39:00.487 回答
0

好像没有可执行权限,"chmod +x shell_script_filename"在执行shell脚本之前尝试执行

于 2013-02-20T19:51:00.383 回答