Скрипт запуска сервера.

Dreadlight

Участник
Сообщения
29
Реакции
20
Нашёл в интернете скрипт запуска сервера с перезапуском после падения. В этом скрипте есть одна проблема:
Если я запущу сервер вручную командой, то тогда сервер раз в 30 секунд будет проверять на screen и если скрин убит, то тогда запускать сервак по новой.
Это не работает, если запускать сервер через crontab или rc.local. Как исправить?
C-подобный:
#! /bin/sh
## v0.0.2
PATH=/usr/bin:/usr/sbin:/bin:/sbin
#Имя для скрина сервера игры
SERVER_NAME="s1"
#Директория где находится папка с сервером.
GAME_PATH="/home/steam/s1"
#Имя для контроллера
CONTROLLER="s1"
#Директория где находится скрипт server.sh
PWD_PATH=$(dirname `readlink -f $0`)
#Логирование крашей (Вместо false путь до лога, например /var/logs/ServerCrashesLog.txt)
CRASH_LOG="/home/steam/s1/crash/servercrash.txt"

check(){
PID=`ps fax |grep $SERVER_NAME | grep SCREEN | awk '{print $1}'`
if [  -z "$PID"  ]
then
    if [ "$CRASH_LOG" != "false" ]
    then
        echo $(date +%d.%m.%Y%t%H:%M:%S%t)"- Game server is crashed!" >>$CRASH_LOG
    fi
    echo "Game server is not running!"
    start
else
        echo "Game server is running..."
fi
}
start()
{
cd $GAME_PATH && screen -AmdS $SERVER_NAME ./srcds_run -game csgo -console -autoupdate -steam_dir /home/steam/steamcmd/ -steamcmd_script autoupdate.txt -usercon -condebug +game_type 0 +game_mode 0 +mapgroup mg_allclassic +map de_dust -tickrate 64 -port 27015 -maxplayers_override 40 +sv_pure 0 +sv_lan 0 -norestart
echo "Starting Game server...!"
controller
}
controller()
{
if test -r "${PWD_PATH}/PPID"
then
    echo "$CONTROLLER is running..."
else
    watch -n 30 "$PWD_PATH/server.sh check" >>/dev/null &
    echo $!>${PWD_PATH}/PPID
    echo "Starting Game server and AutoRestart..."
fi
}

stop()
{
if [ "$1" = "controller" ]
then
    if test -r "${PWD_PATH}/PPID"
    then
        PID=`cat ${PWD_PATH}/PPID`
        kill $PID
        rm -rf ${PWD_PATH}/PPID
    else
        echo "Controller not running!"
    fi
else
    PID=`ps fax | grep $1 | grep SCREEN | awk '{ print $1 }'`
    if [  -z "$PID"  ]
    then
        echo "$1 not running!"
    else
        kill $PID
    fi
fi
}

case "$1" in
start)
controller
;;
stop)
echo "Stopping Game server and AutoRestart..."
stop controller
stop ${SERVER_NAME}
;;
restart)
stop ${SERVER_NAME}
start
;;
check)
check
;;
*)
echo $"Usage: $0 {start|stop|restart|check}"
exit 1
esac
exit 0
 
Сверху Снизу