我正在看一个脚本,实际上将重新启动游戏服务器,以防万一他们崩溃。 游戏服务器实际上是通过控制面板在屏幕会话中启动的。 他们必须重新启动,通过杀死他们各自的屏幕会话,并在同一个新的屏幕会话中重新启动它们。 我已经完成了这个脚本,但它并没有真正的工作,并出现错误。
#!/bin/bash START='cd /home/test; ./GameServer +set parameters' SCREEN_NAME="test" while /bin/true; do sleep 5 SERVER=`ps --User test | grep GameServer | grep -v grep | wc -l` if [[ $SERVER -eq "0" ]]; then screen -S $SCREEN_NAME-X quit ; screen -S $SCREEN_NAME -md $START sleep 10 fi done
进程名称是“游戏服务器”,一个问题是杀死屏幕会话,因为它不会退出,如果我杀死所有的屏幕会话,运行脚本的屏幕也会退出。
test@de:~$ screen -list There is a screen on: 31861.2-test (08/11/13 12:51:06) (Detached) 1 Socket in /var/run/screen/S-test. test@de:~$ screen -r 2-test -X quit No screen session found. test@de:~$ screen -x 2-test -X quit No screen session found. test@de:~$ screen -S 2-test -X quit No screen session found.
我可以通过“screen -x”附加到上面的屏幕上,如果我以“screen -S test”的forms启动它,我也可以使用上面的命令杀死一个同名的屏幕。 我相信在控制面板中有一些东西以不同的方式启动,以至于无法使用名称进行附加。
哦,来吧,不要用这个屏幕。
使用实际devise的东西来照顾进程,并在死后重新启动/重新生成。
其他任何事情都只是车轮改造,永远不会像testing一样好。