我正在查看一个脚本,该脚本实际上会在游戏服务器崩溃时重新启动它们。游戏服务器实际上是通过控制面板在屏幕会话中启动的。必须通过终止各自的屏幕会话并在具有相同名称的新屏幕会话中重新启动它们来重新启动它们。我自己编写了这个脚本,但它并没有真正起作用并且遇到了错误。
#!/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”启动它,我也可以使用上述命令关闭同名的屏幕。我相信控制面板中有一些东西以不同的方式启动它,因此无法使用该名称进行附加。