我有一个游戏服务器。它通过 dotnet 在 linux 上运行。我在“screen ” session 中运行它。 但是我正在努力重新启动此服务器。 从外面看,很容易。我只是通过名称杀死现有 screen 并创建新 screen 。 但是,当我想从内部重新启动服务器时(现有游戏进程启动运行脚本的新进程,杀死命名 screen 并启动新进程)
具体来说:
停止.sh:
screen -r gameserver -X quit
start.sh:
screen -L -A -m -d -S gameserver /usr/bin/dotnet /gameserver/game.dll
重启.sh:
/gameserver/stop.sh
/gameserver/start.sh
现在,如果我从 screen 内部以编程方式运行 restart.sh,它会调用 stop.sh,这会终止当前 screen 以及此 restart.sh 脚本,因此新 screen 不会启动。
我尝试通过 screen 运行 restart.sh:
screen -L -m -d /bin/bash -c /gameserver/restart.sh
但是还是不行... 我希望这会在新 screen 中运行 restart.sh,其中“游戏服务器” screen 将终止并启动新 screen ,然后在该 screen 运行 restart.sh 后停止。但是没有:(
有什么想法吗?
最佳答案
你不能在 screen 内杀死这个进程吗? 有点像
screen -r gameserver kill $(ps aux|grep 'game.dll'|awk '{print $2}')
?
关于linux - 在现有 screen 中创建新的 'screen',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49720292/