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!