- Операционная система
- Linux
Здравствуйте.
При краше кс2 сервера полностью убивается окно screen и приходится вручную его запускать, с ксго серверами этой проблемы не было. Пытаюсь найти способ, чтобы в случае краша автоматически выполнялась команда запуска сервера.
Запускаю сервер через
Полностью функция старта в скрипте выглядит так:
За запуск отвечает код
Под ним я решил добавить код, который в случае краша окна будет выполнять команду
Выглядит это всё следующим образом
Но теперь сервер просто не запускается)
Прошу поправить меня. Буду благодарен
upd. Решено
При краше кс2 сервера полностью убивается окно screen и приходится вручную его запускать, с ксго серверами этой проблемы не было. Пытаюсь найти способ, чтобы в случае краша автоматически выполнялась команда запуска сервера.
Запускаю сервер через
./cs2-server-launcher.sh start
Полностью функция старта в скрипте выглядит так:
C-подобный:
function start {
if [ ! -d "$DIR_ROOT" ]; then echo "ERROR: \"${DIR_ROOT}\" is not a directory"; exit 1; fi
if [ ! -x "$DIR_ROOT/$DAEMON_GAME" ]
then
echo "NOTICE: $DIR_ROOT/$DAEMON_GAME does not exist or is not executable."
create
fi
if [ "$CSGO_DOCKER" = "0" ]
then
if status; then echo "$SCREEN_NAME is already running"; exit 1; fi
fi
# Create runscript file for autoupdate
echo "Create runscript file '$STEAM_RUNSCRIPT' for autoupdate..."
cd "$DIR_STEAMCMD"
echo "force_install_dir $DIR_ROOT" >> "$STEAM_RUNSCRIPT"
echo "login $STEAM_LOGIN $STEAM_PASSWORD" > "$STEAM_RUNSCRIPT"
echo "app_update 730" >> "$STEAM_RUNSCRIPT"
echo "quit" >> "$STEAM_RUNSCRIPT"
chown ${USER} "$STEAM_RUNSCRIPT"
chmod 600 "$STEAM_RUNSCRIPT"
# Patch srcds_run
sed -i -e 's#\./steam\.sh #\./steamcmd\.sh #g' ${DIR_ROOT}/${DAEMON_GAME}
# Generated misc args
GENERATED_ARGS=""
if [ -z "${API_AUTHORIZATION_KEY}" -a -f "$DIR_GAME/webapi_authkey.txt" ]; then API_AUTHORIZATION_KEY=$(cat "$DIR_GAME/webapi_authkey.txt"); fi
if [ ! -z "${API_AUTHORIZATION_KEY}" ]
then
GENERATED_ARGS="-authkey ${API_AUTHORIZATION_KEY}"
if [ ! -z "${WORKSHOP_COLLECTION_ID}" ]; then GENERATED_ARGS="${GENERATED_ARGS} +host_workshop_collection ${WORKSHOP_COLLECTION_ID}"; fi
if [ ! -z "${WORKSHOP_START_MAP}" ]; then GENERATED_ARGS="${GENERATED_ARGS} +workshop_start_map ${WORKSHOP_START_MAP}"; fi
fi
if [ ! -z "${GSLT}" ]; then GENERATED_ARGS="${GENERATED_ARGS} +sv_setsteamaccount ${GSLT}"; fi
# Start game
PARAM_START="${PARAM_START} ${GENERATED_ARGS}"
echo "Start command : $PARAM_START"
if [ "$CSGO_DOCKER" = "0" ]
then
if [ $(id -u) -eq 0 ]
then
su - ${USER} -c "cd $DIR_ROOT ; rm -f screenlog.* ; screen -L -AmdS $SCREEN_NAME ./$DAEMON_GAME $PARAM_START"
else
cd "$DIR_ROOT"
rm -f screenlog.*
screen -L -AmdS ${SCREEN_NAME} ./${DAEMON_GAME} ${PARAM_START}
fi
else
cd ${DIR_ROOT}
bash ${DAEMON_GAME} ${PARAM_START}
fi
}
За запуск отвечает код
C-подобный:
PARAM_START="${PARAM_START} ${GENERATED_ARGS}"
echo "Start command : $PARAM_START"
if [ "$CSGO_DOCKER" = "0" ]
then
if [ $(id -u) -eq 0 ]
then
su - ${USER} -c "cd $DIR_ROOT ; rm -f screenlog.* ; screen -L -AmdS $SCREEN_NAME ./$DAEMON_GAME $PARAM_START"
else
cd "$DIR_ROOT"
rm -f screenlog.*
screen -L -AmdS ${SCREEN_NAME} ./${DAEMON_GAME} ${PARAM_START}
fi
else
cd ${DIR_ROOT}
bash ${DAEMON_GAME} ${PARAM_START}
fi
}
Под ним я решил добавить код, который в случае краша окна будет выполнять команду
./cs2-server-launcher.sh start
Выглядит это всё следующим образом
C-подобный:
PARAM_START="${PARAM_START} ${GENERATED_ARGS}"
echo "Start command : $PARAM_START"
if [ "$CSGO_DOCKER" = "0" ]
then
if [ $(id -u) -eq 0 ]
then
su - ${USER} -c "cd $DIR_ROOT ; rm -f screenlog.* ; screen -L -AmdS $SCREEN_NAME ./$DAEMON_GAME $PARAM_START"
else
cd "$DIR_ROOT"
rm -f screenlog.*
screen -L -AmdS ${SCREEN_NAME} ./${DAEMON_GAME} ${PARAM_START}
fi
else
cd ${DIR_ROOT}
bash ${DAEMON_GAME} ${PARAM_START}
fi
}
// мой говнокод
while true; do
if ps ax | grep {${SCREEN_NAME}} | grep -v grep > /dev/null
then
sleep 30
else
./cs2-server-launcher.sh start
fi
done
Прошу поправить меня. Буду благодарен

upd. Решено
Последнее редактирование: