Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Скрипт рестарта сервера

Статус пользователя JIokoMoTuB
сообщение 3.11.2011, 12:24
Сообщение #1


Стаж: 16 лет

Сообщений: 2174
Благодарностей: 566
Полезность: 425

Я ипользую для авторестарта сервера при падении вот такой скрипт
Код
#!/bin/sh
############################################################################
#                                                                          #
# Script written by morfin for Bazalt43|CS 1.6|Public.                     #
# Version 0.7                                                              #
# CONTACTS:                                                                #
# Mail: mk75@sky.ru                                                        #
# ICQ: 382904793                                                           #
# This script restarting counter-strike server runned with -pidfile option #
# and -norestart option and restores pidfile if it was deleted when server #
# is running. It can be runned in background and when catched kill signal  #
# 2 or 3 finishes hlds and exit normally.                                  #
# P.S Don't try to kill server before it written pidfile.                  #
#                                                                          #
############################################################################

#variable to set server pidfile name
PIDFILE="hlds.pid"

#restarter pidfile name default restarter.pid
RESTARTER_PIDFILE="restarter.pid"

#path to server
SERVER_PATH="/home/id2"

#If script not included as library then execute that code
if [ "$INCLUDED" = "" ];then
  VERSION="0.6"

  if [ "$1" = "-v" ] || [ "$1" = "--version" ]; then
    echo $VERSION
    exit
  fi

  if [ "$CALLED" = "" ]; then
    #remember your current position
    CURRENT_DIR=`pwd -L`
    #scripts path
    #SCRIPT_PATH=`dirname $0`
  fi
  cd $SERVER_PATH
  #variable to set server check time
  CHECK_TIME=60

  #variable storing runscript
  RUN_SCRIPT="screen -A -m -d -S id2 ./hlds_run -binary ./hlds_i686 -console -game cstrike +map de_dust2 +maxplayers 20 +ip 0.0.0.0 +port 27052 -noipx +insecure +pingboost 3 –norestart -nomaster -pidfile ./${PIDFILE}"

  #File for logging errors and other default : restarter.log

  LOG_FILE="classic-id2.log"

  #script running first time
  FIRST_RUN=1

  #defining all very often calling commands
fi

start_server()
{
  while (true)
  do
    if [ -e ${PIDFILE} ]; then
      if [ $(ps -p $(cat ${PIDFILE})|wc -l) = "1" ]; then restart_server
      fi
   else restart_server
   fi
   sleep ${CHECK_TIME}
  done
}

finish_server()
{
  if [ "${TTY}" = "" ]; then
    TTY=`cat restarter.tmp`
    rm restarter.tmp
  fi
  if [ -e ${PIDFILE} ]; then
    PID=`cat ${PIDFILE}`
  fi
  echo "Wait for full stop of server">${TTY}
  if [ $(ps -p $(cat ${PIDFILE})|wc -l) = "1" ]; then
    echo "Server was finished">${TTY}
    rm ${PIDFILE}
    rm ${RESTARTER_PIDFILE}
    exit
  else
    kill -3 ${PID}
    sleep 10
    finish_server
  fi
}

restart_server()              
{
  if [ "${FIRST_RUN}" = 1 ]; then
    FIRST_RUN=0
    $(${RUN_SCRIPT}) >>/dev/null
    echo "Please wait for full start of server">>${TTY}
    sleep 30
    if [ -e ${PIDFILE} ]; then echo "Server was started successfully!">${TTY}; fi
  else
    MESSAGE="Server was restarted after crash"
    echo $(date "+%x %X") $MESSAGE >> ${LOG_FILE}  
    $(${RUN_SCRIPT}) >>/dev/null
  fi
  trap 'INCLUDED="1"; . $0; finish_server ' 2 3
}

start_restarter()
{
  export CALLED="1"
  export TTY=`tty`
  export SERVER_PATH=${SERVER_PATH}
  screen -A -m -d sh ${CURRENT_DIR}/`basename $0`>>mylog.txt
}

stop_restarter()
{
  echo `tty`>restarter.tmp
  kill -3 `cat ${RESTARTER_PIDFILE}`
  echo "Successfuly stopped server"
}

start()
{
  if [ -e ${RESTARTER_PIDFILE} ]; then
      if [ `ps -p $(cat ${RESTARTER_PIDFILE})|wc -l` = "1" ]; then start_restarter
      else
        echo "Server already running! (pid=`cat ${RESTARTER_PIDFILE}`)"
      fi
  else start_restarter
  fi
}

restart()
{
  if [ -e ${RESTARTER_PIDFILE} ] &&  [ `ps -p $(cat ${RESTARTER_PIDFILE})|wc -l` = "2" ]; then
    stop_restarter
    start_restarter
  else echo "Can't restart: server not running!"
  fi
}

stop()
{
   if [ -e ${RESTARTER_PIDFILE} ] &&  [ `ps -p $(cat ${RESTARTER_PIDFILE})|wc -l` = "2" ]; then
     stop_restarter
   else echo "Can't stop: server not running!"
   fi
}

status()
{
  if [ -e ${PIDFILE} ] && [ $(ps -p $(cat ${PIDFILE})|wc -l) = "2" ]; then
    echo "hlds running as pid $(cat ${PIDFILE})"
  else echo "hlds not running"
  fi
  exit
}

if [ "${INCLUDED}" = "" ]; then
  if [ "${CALLED}" = "1" ]; then
    echo $$ > ${RESTARTER_PIDFILE}
    start_server
  else
    if [ "$1" = "" ] ; then start
    else
      PARAMETER="`echo $1|tr [:upper:] [:lower:]`"
      if [ ${PARAMETER} = "start" ]; then start
        elif [ ${PARAMETER} = "stop" ]; then stop
        elif [ ${PARAMETER} = "restart" ]; then restart
        elif [ ${PARAMETER} = "status" ]; then status
      fi
    fi
  fi
fi

#then return to previous location

if [ "$CALLED" = "" ]; then
  cd ${CURRENT_DIR}
fi


Проблема в том, если сервер просто закрывается, то все перезапускается как надо, но если к примеру с какойто ошибкой, сервера перезапускается, но старый сервер висит в памяти. Вопрос, как сделать, чтобы сервер убирался из памяти при любом зависании?


Empower isn't phoenix
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
The Asmodai
сообщение 3.11.2011, 12:46
Сообщение #2
Стаж: 14 лет

Сообщений: 271
Благодарности: выкл.

К скрипту пумы такой же вопрос/предложение.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя JIokoMoTuB
сообщение 3.11.2011, 15:10
Сообщение #3


Стаж: 16 лет

Сообщений: 2174
Благодарностей: 566
Полезность: 425

Там с этим проблема решена?както ответа вразумительного не было.


Empower isn't phoenix
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя 330863
сообщение 3.11.2011, 18:52
Сообщение #4


Стаж: 16 лет

Сообщений: 4358
Благодарностей: 1079
Полезность: 497

ds-jan,
попробуй поставь мой скрипт протестируй, только в крон засунь "имя скрипта checker"
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
The Asmodai
сообщение 3.11.2011, 19:10
Сообщение #5
Стаж: 14 лет

Сообщений: 271
Благодарности: выкл.

330863, в твоем скрипте такая же шляпа. При рестарте старый скрин может не закрыться, тогда их будет 2. Соответственно, начинаются проблемы.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя 330863
сообщение 5.11.2011, 23:19
Сообщение #6


Стаж: 16 лет

Сообщений: 4358
Благодарностей: 1079
Полезность: 497

The Asmodai,
забыл что обновление с этим фиксом нету на сайте)))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: