2012-07-17 75 views
0

我试图修改这个非常简单的外壳脚本,我写了这个脚本来检查屏幕是否已经激活,如果是,请不要创建它们。例如,如果我使用start参数将该脚本调用两次,则将创建四个屏幕会话。我想阻止这一点。在屏幕上启动游戏服务器的外壳脚本

#! /bin/sh 
# /etc/init.d/css-server 
# 

case "$1" in 
    start) 
    echo "Starting Nullus Imprimis war server..." 
    screen -A -m -d -S css-war-server /home/css-servers/war-server/css/srcds_run -game cstrike +map de_dust2 +maxplayers 16 -autoupdate -port 2555 
    echo "Nullus Imprimis war server started" 
    echo "Starting Nullus Imprimis pub server #1..." 
    screen -A -m -d -S css-pub-server-1 /home/css-servers/pub-server-1/css/srcds_run -game cstrike +map de_dust2 +maxplayers 32 -autoupdate -port 2666 
    echo "Nullus Imprimis pub server #1 started" 
    ;; 
    stop) 
    echo "Stopping Nullus Imprimis war server..." 
    screen -S css-war-server -X quit 
    echo "Nullus Imprimis war server stopped" 
    echo "Stopping Nullus Imprimis pub server #1..." 
    screen -S css-pub-server-1 -X quit 
    echo "Nullus Imprimis pub server #1 stopped" 
    ;; 
    *) 
    echo "Usage: service css-servers {start|stop}" 
    exit 1 
    ;; 
esac 

exit 0 

而且,我要让下自己的用户名运行的服务器,在这种情况下css-servers。我怎样才能做到这一点?

回答

1

要检查屏幕已经在运行,我通常只是从screen -ls grep显示它:

screen -ls | grep -q NAME || ...do something if server is not running... 

或者:

if ! screen -ls | grep -q NAME; then 
    ...do something if server is not running... 
fi 

为了运行这是一个不同的用户,我会建议使用sudo -u运行启动脚本,如下所示:

sudo -u css-servers STARTUP_SCRIPT