Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Samoczynny restart po crashu..


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
Brak odpowiedzi do tego tematu

#1 TuDe

    Banned

  • Zbanowany

Reputacja: 9
Nowy

  • Postów:87
  • Imię:Adam
  • Lokalizacja:Kalety
Offline

Napisano 22.12.2011 18:50

Witam.
Serwer mi sie czesto crashuje, przez pluginy, musze poprawic, jednak nie mam na to teraz zbyt czasu..
Chcialem zrobic na razie tak, ze jak serwer sie scrashuje samoczynnie sie wlacza..
Czytalem temat na amxx o samoczynnym wlaczaniu sie serwerow..
Dowiedzialem sie, że praktycznie na kazdym hostingu jest to domyslnie ustawione, ja mam fpsplay i tam tego nie ma ;/..
Pavulon napisal ze odpowiada za to plik hlds_run i jak nie ma tam komendy -norestart serwer powinien sie sam wlaczac, jestety u mnie jest ta komenda:
#!/bin/sh
#
#	   Copyright (c) 2002, Valve LLC. All rights reserved.
#
# a wrapper script for the main hl dedicated server binary.
# Performs auto-restarting of the server on crash. You can
# extend this to log crashes and more.
#
# setup the libraries, local dir first!
export LD_LIBRARY_PATH=".:$LD_LIBRARY_PATH"
init() {
# Initialises the various variables
# Set up the defaults
GAME="valve"
DEBUG=0
RESTART="yes"
HL=./hlds_i486
HL_DETECT=1
TIMEOUT=10 # time to wait after a crash (in seconds)
CRASH_DEBUG_MSG="email debug.log to [email protected]"
GDB="gdb" # the gdb binary to run
DEBUG_LOG="debug.log"
PID_FILE=""
STEAM=""
STEAMERR=""
SIGINT_ACTION="quit 0" # exit normally on sig int
NO_TRAP=0
AUTO_UPDATE=""
BETA_VERSION=""
PARAMS=$*
# Remove any old default pid files
# Cant do this as they may be still running
#rm -f hlds.*.pid
# use the $FORCE environment variable if its set
if test -n "$FORCE" ; then
  # Note: command line -binary will override this
  HL=$FORCE
  HL_DETECT=0
fi
while test $# -gt 0; do
  case "$1" in
  "-game")
   GAME="$2"
   shift ;;
  "-debug")
   DEBUG=1
   # Ensure that PID_FILE is set
   if test -z "$PID_FILE"; then
    PID_FILE="hlds.$$.pid"
   fi ;;
  "-norestart")
   RESTART="" ;;
  "-pidfile")
   PID_FILE="$2"
   shift ;;
  "-binary")
   HL="$2"
   HL_DETECT=0
   shift ;;
  "-timeout")
   TIMEOUT="$2"
   shift ;;
  "-gdb")
   GDB="$2"
   shift ;;
  "-debuglog")
   DEBUG_LOG="$2"
   shift ;;
  "-autoupdate")
   AUTO_UPDATE="yes"
   STEAM="./steam"
   RESTART="yes" ;;
  "-steamerr")
   STEAMERR=1 ;;
  "-ignoresigint")
   SIGINT_ACTION="" ;;
  "-notrap")
   NO_TRAP=1 ;;
  "-beta")
   BETA_VERSION="$2"
   shift ;;
  "-help")
   # quit with syntax
   quit 2
   ;;
  esac
  shift
done
# Ensure we have a game specified
if test -z "$GAME"; then
  echo "Unable to determine game type from command line."
  quit 1
elif test ! -d "$GAME"; then
  echo "Invalid game type '$GAME' sepecified."
  quit 1
fi
if test 0 -eq "$NO_TRAP"; then
  # Set up the int handler
  # N.B. Dont use SIGINT symbolic value
  #  as its just INT under ksh
  trap "$SIGINT_ACTION" 2
fi
# Only detect the CPU if it hasnt been set with
# either environment or command line
if test "$HL_DETECT" -eq 1; then
  detectcpu
fi
if test ! -f "$HL"; then
  echo "Half-life binary '$HL' not found, exiting"
  quit 1
elif test ! -x "$HL"; then
  # Could try chmod but dont know what we will be
  # chmoding so just fail.
  echo "Half-life binary '$HL' not executable, exiting"
  quit 1
fi
# Setup debugging
if test "$DEBUG" -eq 1; then
  #turn on core dumps <img src='https://amxx.pl/public/style_emoticons/<#EMO_DIR#>/smile.png' class='bbc_emoticon' alt=':)' /> (if possible)
  echo "Enabling debug mode"
  if test "`ulimit -c`" -eq 0 ; then
   ulimit -c 2000
  fi
  GDB_TEST=`$GDB -v`
  if test -z "$GDB_TEST"; then
   echo "Please install gdb first."
   echo "goto http://www.gnu.org/software/gdb/ "
   DEBUG=0 # turn off debugging cause gdb isn't installed
  fi
fi
PID_IN_PARAMS="`echo $PARAMS | grep -e -pidfile`"
if test -z "$PID_IN_PARAMS" && test -n "$PID_FILE"; then
  HL_CMD="$HL $PARAMS -pidfile $PID_FILE"
else
  HL_CMD="$HL $PARAMS"
fi
}
syntax () {
# Prints script syntax
echo "Syntax:"
echo "$0 [-game <game>] [-debug] [-norestart] [-pidfile]"
echo " [-binary [hlds_i486|hlds_i686|hlds_amd]"
echo " [-timeout <number>] [-gdb <gdb>] [-autoupdate]"
echo " [-steamerr] [-ignoresigint] [-beta <version>]"
echo "  [-debuglog <logname>]"
echo "Params:"
echo "-game <game>		 Specifies the <game> to run."
echo "-debug			   Run debugging on failed servers if possible."
echo "-debuglog <logname> Log debug output to this file."
echo "-norestart		   Don't attempt to restart failed servers."
echo "-pidfile <pidfile>   Use the specified <pidfile> to store the server pid."
echo "-binary <binary>	 Use the specified binary ( no auto detection )."
echo "-timeout <number>    Sleep for <number> seconds before restarting"
echo "   a failed server."
echo "-gdb <gdb>		   Use <dbg> as the debugger of failed servers."
echo "-steamerr		 Quit on steam update failure."
echo "-beta <version>  Make use of a beta version of this server from Steam"
echo "-ignoresigint	    Ignore signal INT ( prevents CTRL+C quitting"
echo "   the script )."
echo "-notrap			  Don't use trap. This prevents automatic"
echo "   removal of old lock files."
echo ""
echo "Note: All parameters specified as passed through to the server"
echo "including any not listed."
}
debugcore () {
# Debugs any core file if DEBUG is set and
# the exitcode is none 0
exitcode=$1
if test $exitcode -ne 0; then
  if test -n "$DEBUG" ; then
   echo "bt" > debug.cmds;
   echo "info locals" >> debug.cmds;
   echo "info sharedlibrary" >> debug.cmds
   echo "info frame" >> debug.cmds;  # works, but gives an error... must be last
   echo "----------------------------------------------" >> $DEBUG_LOG
   echo "CRASH: `date`" >> $DEBUG_LOG
   echo "Start Line: $HL_CMD" >> $DEBUG_LOG
   # check to see if a core was dumped
   if test -f core ; then
    CORE="core"
   elif test -f core.`cat $PID_FILE`; then
    CORE=core.`cat $PID_FILE`
   elif test -f "$HL.core" ; then
    CORE="$HL.core"
   fi
  
   if test -n "$CORE"; then
    $GDB $HL $CORE -x debug.cmds -batch >> $DEBUG_LOG
   fi
 
   echo "End of crash report" >> $DEBUG_LOG
   echo "----------------------------------------------" >> $DEBUG_LOG
   echo $CRASH_DEBUG_MSG
   rm debug.cmds
  else
   echo "Add \"-debug\" to the $0 command line to generate a debug.log to help with solving this problem"
  fi
fi
}
detectcpu() {
# Attempts to auto detect the CPU
echo "Auto detecting CPU"
if test "FreeBSD" = `uname`; then
  PROC="/usr/compat/linux/proc"
else
  PROC="/proc"
fi
if test -e $PROC/cpuinfo; then
  CPU_VERSION="`grep "cpu family" $PROC/cpuinfo | cut -f2 -d":" | tr -d " " | uniq`";
  if test $CPU_VERSION -lt 4; then
   echo "Error: hlds_l REQUIRES a 486 CPU or better";
   quit 1
  elif test $CPU_VERSION -ge 15; then
   # Core 2 or greater
   echo "Using AMD Optimised binary."
   HL=./hlds_amd
  elif test $CPU_VERSION -ge 6; then
   AMD="`grep AMD $PROC/cpuinfo`";
   if test -n "$AMD"; then
    echo "Using AMD Optimised binary."
    HL=./hlds_amd
   else
    echo "Using Pentium II Optimised binary."
    # there is a CPU manufactured by VIA that
    # doesn't support some PII instructions...
    # detect this.
    VIACHIP=`grep CentaurHauls $PROC/cpuinfo`
  
    if test -z "$VIACHIP"; then
	 HL=./hlds_i686
    fi
   fi 
  else
   echo "Using default binary."
  fi
elif test "FreeBSD" = `uname`; then
  CPU="`grep 'CPU:' /var/run/dmesg.boot`"
  AMD="`echo $CPU |grep AMD`"
  K8="`echo $CPU |grep K8`"
  I686="`echo $CPU |grep 686`"
  if test -n "$AMD"; then
   echo "Using AMD Optimised binary."
   HL=./hlds_amd
  elif test -n "$K8" ; then
   echo "Using AMD Optimised binary."
   HL=./hlds_amd
  elif test -n "$I686" ; then
   echo "Using Pentium II Optimised binary."
   HL=./hlds_i686
  else
   echo "Using default binary."
  fi
else
  echo "Using default binary."
fi
}
update() {
updatesingle
}
updatesingle() {
# Run the steam update
# exits on failure if STEAMERR is set
if test -n "$AUTO_UPDATE"; then
  if test -f "$STEAM"; then
   echo "Updating server using Steam."
   CMD="$STEAM -command update -game $GAME -dir .";
   if  test -n "$BETA_VERSION"; then
	 CMD="$CMD -beta $BETA_VERSION";
   fi
   $CMD
   if test $? -ne 0; then
    if test -n "$STEAMERR"; then
	 echo "`date`: Steam Update failed, exiting."
	 quit 1
    else
	 echo "`date`: Steam Update failed, ignoring."
	 return 0
    fi
   fi
  else
   if test -n "$STEAMERR"; then
    echo "Could not locate steam binary:$STEAM, exiting.";
    quit 1
   else
    echo "Could not locate steam binary:$STEAM, ignoring.";
    return 0
   fi
  fi
fi
return 1
}

run() {
# Runs the steam update and server
# Loops if RESTART is set
# Debugs if server failure is detected
# Note: if RESTART is not set then
# 1. DEBUG is set then the server is NOT exec'd
# 2. DEBUG is not set the the server is exec'd
if test -n "$RESTART" ; then
  echo "Auto-restarting the server on crash"
  #loop forever
  while true
  do
   # Update if needed
   update
   # Run the server
   $HL_CMD
   retval=$?
   if test $retval -eq 0 && test -z "$AUTO_UPDATE"; then
    break; # if 0 is returned then just quit
   fi
   debugcore $retval
   echo "`date`: Server restart in $TIMEOUT seconds"
   # don't thrash the hard disk if the server dies, wait a little
   sleep $TIMEOUT
  done # while true
else
  # Update if needed
  update
  # Run the server
  if test "$DEBUG" -eq 0; then
   # debug not requested we can exec
   exec $HL_CMD
  else
   # debug requested we can't exec
   $HL_CMD
   debugcore $?
  fi
fi
}
quit() {
# Exits with the give error code, 1
# if none specified.
# exit code 2 also prints syntax
exitcode="$1"
# default to failure
if test -z "$exitcode"; then
  exitcode=1
fi
case "$exitcode" in
0)
  echo "`date`: Server Quit" ;;
2)
  syntax ;;
*)
  echo "`date`: Server Failed" ;;
esac
# Remove pid file
if test -n "$PID_FILE" && test -f "$PID_FILE" ; then
  # The specified pid file
  rm -f $PID_FILE
fi
# reset SIGINT and then kill ourselves properly
trap - 2
kill -2 $$
}
# Initialise
init $*
# Run
run
# Quit normally
quit 0

I to nawet kilka razy!

Moglby ktos poprawic ten pliczek tak, aby serwer sam sie wlaczal po crashu..

Lub wyslac hlds_run z jakiegos serwera na ktorym to dziala? Moze macie taki?

Z gory thx ;) Beda ++ :>

Up!




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych