【发布时间】:2013-02-20 18:25:07
【问题描述】:
我正在尝试通过以下代码执行一个 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
我也在从关闭挂钩运行此代码,这可能是问题吗?这是因为该软件是一个游戏服务器,它的目的是让用户可以使用重启命令或让它自动重启,而无需自己设置任何东西。
编辑:我决定将错误输出到一个文本文件,发现这个“必须连接到终端”。有任何想法吗?我认为这是与使用屏幕有关的问题。
【问题讨论】:
-
你确定你的文件是可执行的(例如
chmod +x filename)?另外,考虑使用getRuntime().exec(new String[] {"sh",file.getPath()}); -
也许 shell 没有正确解析你的命令行。
file.getPath()的值是多少?检查文件是否在合适的环境(路径等)下运行。尝试一个简单的 sh 文件(例如,一个只记录它运行的文件)。 -
@iTech 是的,当我从控制台执行该文件时,该文件是可执行的
-
@TedHopp 会的,这可能与我在关闭挂钩中运行它有关吗?这意味着启动另一个程序,该程序将保持打开状态,直到终止。这旨在作为服务器命令,以便用户可以通过命令重新启动服务器。
-
尝试将
-t添加到sh命令serverfault.com/questions/21806/…
标签: java linux sh execute gnu-screen