我正在查看一个脚本,该脚本实际上会在游戏服务器崩溃时重新启动。游戏服务器实际上是通过控制面板在屏幕会话中启动的。必须通过终止各自的屏幕会话并在具有相同名称的新屏幕会话中再次启动它们来重新启动它们。我自己完成了这个脚本,但它并没有真正起作用并且遇到错误。
#!/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
进程名称是“gameserver”,问题在于终止屏幕会话,因为它不会退出,如果我终止所有屏幕会话,运行脚本的屏幕也会退出。
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”,我也可以使用上面的命令杀死一个同名的屏幕。我相信控制面板中有一些东西以不同的方式启动它,以至于它无法使用名称附加。
哦,来吧,不要为此使用屏幕。
使用实际上旨在照顾进程的东西,并在它们死亡时重新启动/重生它们。
其他任何东西都只是轮子改造,永远不会那么好或经过测试。