Dreadlight
Участник
- Сообщения
- 29
- Реакции
- 20
Нашёл в интернете скрипт запуска сервера с перезапуском после падения. В этом скрипте есть одна проблема:
Если я запущу сервер вручную командой, то тогда сервер раз в 30 секунд будет проверять на screen и если скрин убит, то тогда запускать сервак по новой.
Это не работает, если запускать сервер через crontab или rc.local. Как исправить?
Если я запущу сервер вручную командой, то тогда сервер раз в 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