SRCDS Steam group


linux scripts for srcds for all day
#1
I think it nessesary to group in one post all useful linux script for SRCDS. Because there are more than 40 pages, hard to search...

srcds start script
http://forums.srcds.com/viewtopic/5835

Priority set script
http://www.srcds.com/db/engine.php?subaction=showfull&id=1103579727&archive=

someone know more scripts? post here
I'm searching:
- script for autorestat server if it uses more memory than i want to prevent memory leak
- script for ziping *.dem from folder and place zips to public FTP
from Russia with love
Reply
#2
Here is the autorestart code i use for restart on crash and rcon quit without autoupdate on

create file with the below txt
then run
Filename: RESTART_srcds_run
Code:
#!/bin/sh
#
#       Copyright (c) 2004, Valve LLC. All rights reserved.
#
#    a wrapper script for the main Source engine 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=".:bin:$LD_LIBRARY_PATH"

init() {
    # Initialises the various variables
    # Set up the defaults
    GAME=""
    DEBUG=""
    RESTART="yes"
    HL=./srcds_i486
    HL_DETECT=1
    TIMEOUT=10 # time to wait after a crash (in seconds)
    CRASH_DEBUG_MSG="email debug.log to [email]linux@valvesoftware.com[/email]"
    GDB="gdb" # the gdb binary to run
    DEBUG_LOG="debug.log"
    PID_FILE="" # only needed it DEBUG is set so init later
    STEAM=""
    PID_FILE_SET=0
    STEAMERR=""
    SIGINT_ACTION="quit 0" # exit normally on sig int
    NO_TRAP=0
    AUTO_UPDATE=""
    STEAM_USER=""
    STEAM_PASSWORD=""
    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
            PID_FILE_SET=1
            if test -z "$PID_FILE"; then
                PID_FILE="hlds.$$.pid"
            fi ;;
        "-norestart")
            RESTART="" ;;
        "-pidfile")
            PID_FILE="$2"
            PID_FILE_SET=1
            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 ;;
        "-steamuser")
            STEAM_USER="$2";
            shift ;;
        "-steampass")
            STEAM_PASSWORD="$2";
            shift ;;
        "-help")
            # quit with syntax
            quit 2
            ;;
        esac
        shift
    done

    # Ensure we have a game specified
    if test -z "$GAME"; then
        GAME="cstrike"
        PARAMS="$PARAMS -game $GAME"
    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 "Source Engine 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 "Source engine binary '$HL' not executable, exiting"
        quit 1
    fi

    # Setup debugging
    if test -n "$DEBUG" ; then
        #turn on core dumps :) (if possible)
        echo "Enabling debug mode"
        if test "unlimited" != `ulimit -c` && 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 [url]http://www.gnu.org/software/gdb/[/url] "
            DEBUG="" # turn off debugging cause gdb isn't installed
        fi
    fi

    if test -n "$STEAM_PASSWORD" && test -z "$STEAM_USER"; then
        echo "You must set both the steam username and password."
        quit 1
    fi

    #if test 1 -eq $PID_FILE_SET && 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 [srcds_i486]"
    echo "    [-timeout <number>] [-gdb <gdb>] [-autoupdate]"
    echo "    [-steamerr] [-ignoresigint] [-steamuser <username>]"
    echo "    [-steampass <password>] [-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 "-steamuser <username>    Use this username for steam updates."  
    echo "-steampass <password>    Use this password for steam updates"
    echo "            (-steamuser must be specified as well)."
    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 Source 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 -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: srcds REQUIRES a 486 CPU or better";
            quit 1
        elif test $CPU_VERSION -ge 6; then
            FEATURES="`grep 'flags' /proc/cpuinfo`";
            SSE2="`echo $FEATURES |grep -i SSE2`"
            AMD="`grep AMD /proc/cpuinfo`";
            if test -n "$AMD"; then
                OPTERON="`grep Opteron /proc/cpuinfo`";
                PLATFORM="`uname -m`"
                if test -z "$OPTERON"; then
                    OPTERON="`grep "Athlon HX" /proc/cpuinfo`";
                    if test -z "$OPTERON"; then
                        OPTERON="`grep "Athlon(tm) 64" /proc/cpuinfo`";
                    fi
                fi

                if test -n "$OPTERON" && test "x86_64" = "$PLATFORM"; then
                    echo "Using AMD-Opteron (64 bit) Optimised binary."
                    HL=./srcds_amd
                else
                    echo "Using AMD Optimised binary."
                    HL=./srcds_amd
                fi
            elif  test -n "$SSE2"; then
                # CPU supports SSE2 P4 +
                echo "Using SSE2 Optimised binary."
                HL=./srcds_i686
            else
                echo "Using default binary."
            fi        
        else
            echo "Using default binary."
        fi

    elif test "FreeBSD" = `uname`; then
        CPU="`grep 'CPU:' /var/run/dmesg.boot`"
        FEATURES="`grep 'Features=' /var/run/dmesg.boot`"
        AMD="`echo $CPU |grep AMD`"
        I686="`echo $CPU |grep 686`"
        SSE2="`echo $FEATURES |grep -i SSE2`"
        if test -n "$AMD"; then
            echo "Using AMD Optimised binary."
            HL=./srcds_amd
        elif test -n "$SSE2" ; then
            echo "Using SSE2 Optimised binary."
            HL=./srcds_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."
        
            if test "$GAME" = "cstrike"; then
                GAME="Counter-Strike Source";
            fi
            if test "$GAME" = "dod"; then
                GAME="dods";
            fi

            CMD="$STEAM -command update -dir .";
            if test -n "$STEAM_USER"; then
                CMD="$CMD -username $STEAM_USER";
            fi
            if test -n "$STEAM_PASSWORD"; then
                CMD="$CMD -password $STEAM_PASSWORD";
            fi

            $CMD -game "$GAME"
            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=$?

            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 -z "$DEBUG"; 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

Then i use this to start it:

Code:
screen -dmS dust ./RESTART_srcds_run +game cstrike +maxplayers 12 +ip xx.xxx.xx.x -tickrate 100 +port 27015 +map de_dust2 +fps_max 0

it works great

Original source: http://forums.steampowered.com/forums/showpost.php?p=6480002&postcount=7
Reply
#3
This is a great script - thanks for posting, I am going to link to the original post in on of my threads about auto restart Smile
Reply
#4
Could someone please help me with details on where to locate said file I created for RESTART_srcds_run.txt

Also do you write the code;
Code:
//Auto Restart config using "quit"
screen -415_canal_beta1.bsp ./RESTART_srcds_run +game dod +maxplayers 24 +ip 202.125.39.110 -tickrate 66 +port 27016 +map 415_canal_beta1.bsp +fps_max 0
in the autoexec.cfg file...

P.S. Please excuse me noobness... I started a gaming server business as a learning expirence to learn hands on as I am studying Mutlimedia right now. So please bare with me and thank you in advance for any extra help you can provide. Thank you.
Reply
#5
it goes in your srcds folder. same folder that has srcds_run in it.

also the file name shouldnt end in .txt

JessiePwns Wrote:Could someone please help me with details on where to locate said file I created for RESTART_srcds_run.txt

Also do you write the code;
Code:
//Auto Restart config using "quit"
screen -415_canal_beta1.bsp ./RESTART_srcds_run +game dod +maxplayers 24 +ip 202.125.39.110 -tickrate 66 +port 27016 +map 415_canal_beta1.bsp +fps_max 0
in the autoexec.cfg file...

P.S. Please excuse me noobness... I started a gaming server business as a learning expirence to learn hands on as I am studying Mutlimedia right now. So please bare with me and thank you in advance for any extra help you can provide. Thank you.
Reply
#6
also you need to make the file executable with
chmod +x RESTART_srcds_run
Reply
#7
Hey there,

Thanks for the recognition! I just added another script; this one will install a TF2 server. It could very easily be adapted to run any SRCDS game, however. Hope this helps!

http://forums.srcds.com/viewpost/38429#pid38429

Cheers!
Dan
=-=-=-=-=-=-=-=-=
[Image: banner_560x95.png]
Reply
#8
Hi there !

I'm searching for a script that could possibly stop my server, update it, and then restart it. Then I would use it with cron to run it everyday at 8:00am.

I already made a script that stop/start/restart the server with the good user.

If someone has something like that, I'll take it Smile
[Image: b_350x20_C692108-381007-FFFFFF-000000.png]
Reply
#9
Nevermind, I've done it, it's easy:

#!/bin/sh
/etc/init.d/tf2script stop
cd /home/STEAMDIR
sudo -u USER ./steam -command update -game "tf" -dir . -verify_all
/etc/init.d/tf2script start
[Image: b_350x20_C692108-381007-FFFFFF-000000.png]
Reply
#10
Hi guys!

Can someone help with such problem:

I do have 3 servers running on same machine. One of them crashing almost everyday, but i do not have any scripts for restart on crash, cause this server crashes and screen is still in processes.
Reply
#11
i have a dedicated linux server.. but i do not have root access..i can access the folder that holds the run file but cannot exec any commands.. can this still be done ????
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)