我正在尝试使用 ant+scp 在远程服务器上执行脚本。
远程服务器上的脚本非常简单,它启动了一个用java编写的游戏服务器:
game_server.sh:
java -Xms500M -Xmx500M -jar game.jar
蚂蚁构建.xml:
<?xml version="1.0" ?>
<project default="restart_game_server" name="server">
<target name="restart_game_server">
<sshexec host="x.x.x.x" username="root" password="xxx" command="cd xxx; ./game_server.sh" trust="true" />
</target>
</project>
当我在终端(mac os)中运行命令"ant"时,远程服务器上的game_server.sh已成功执行,但问题是:
"ant"命令被阻止,因为"game_server.sh"永远不会返回。
我试图通过在"屏幕"中启动"game_server"来解决此问题,但我无法弄清楚如何在 shell 脚本中执行此操作,我尝试了类似的东西:
# kill the game sever first
fuser -k -n tcp 9988
# resume the last screen or start a new one
screen -R
# move to the folder where the script is located
cd xxxx
# run script
./game_server.sh
但是我不知道如何使用shell命令而不是键盘(c + a + d)退出屏幕
任何建议将不胜感激,谢谢:)
编辑:
尝试使用"&"方式,但仍然被阻止。
这是 ant 命令输出,你可以看到它是如何被阻止的:
root: ant
Buildfile: build.xml
restart_game_server:
[sshexec] Connecting to x.x.x.x.x:22
[sshexec] cmd : fuser -k -n tcp 9988; cd xxxxx; ./game_server.sh &
[sshexec] 9988/tcp:
[sshexec] 12729
[sshexec]
[sshexec] game sever log
[sshexec] game sever log
[sshexec] game sever log
[sshexec] game sever log
[sshexec] game sever log
[sshexec] game sever log
.......
BLOCKED !!!!!
您可以尝试在后台运行game_server.sh,而无需使用屏幕:
./game_server.sh &
或者,您可以尝试更改构建.xml如下所示:
<?xml version="1.0" ?>
<project default="restart_game_server" name="server">
<target name="restart_game_server">
<sshexec host="x.x.x.x" username="root" password="xxx" command="cd xxx; ./game_server.sh &" trust="true" />
</target>
</project>
使用 screen -d -m
以分离模式运行屏幕。
有关更多详细信息,请参见手册页。