我有一个Java程序来启动TCP / IP游戏服务器。
我有一个与Express Node.js服务器对话的角度应用程序,用于启动/停止游戏服务器。
单击开始按钮后,将在nodejs服务器中执行以下操作:
shell.exec('/web/starter.sh');
这是我的脚本:
:set fileformat=unix
#!/bin/sh
screen -RD server -X quit;
screen -dmS server;
cd ~/cadesim-monomer;
java -jar CadeServerEngine.jar;
它有效,它将启动服务器。但是,每当我再次单击“启动”时,它都不会按预期方式重新启动服务器。它应该杀死屏幕并重新启动?
我做错了什么?
答案 0 :(得分:0)
问题是服务器命令未在分离的屏幕会话中运行。它们都在两个屏幕命令之后运行。
要在此示例的分离屏幕会话中运行命令,将需要使用:
screen -dmS server sh -c "cd ~/cadesim-monomer; java -jar CadeServerEngine.jar"
或者您可以将服务器及其设置放在其自己的外壳文件中,该文件的外观与daemontools运行脚本相似。然后,您将得到一个类似的命令:
screen -dmS server ./server.sh
shebang行也应该是文件中的第一行。该脚本恰好起作用,因为外壳程序是默认解释器。它产生错误line 1: :set: command not found
。 VIM模式设置应在第二行的注释中出现。