[Linux] CS2 Рестарт сервера при краше

mrdiega

Участник
Сообщения
328
Реакции
47
Операционная система
Linux
Здравствуйте.
При краше кс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
Но теперь сервер просто не запускается)
1702003929452.png


Прошу поправить меня. Буду благодарен 😌

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