从Java执行sh文件

问题描述 投票:0回答:4

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

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

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

编辑:我决定将错误输出到文本文件,并发现“必须连接到终端”。有任何想法吗?我认为这与使用屏幕有关。

java linux sh execute gnu-screen
4个回答
0
投票

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

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

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


0
投票

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

最好的祝福。


0
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.