#! /bin/bash # # Start the Counter-Strike dedicated server. # # AUTHORS : # # Julien Escario ( pandemik@azilog.net ) # & # Cedric Rochat ( crochat@younics.org ) # & # Cmdr._Firewalker ( cmdr._firewalker@web.de ) # # =========================================== # # What you need: # # Linux :) # awk # screen # the hlds_l & cstrike files (obtainable via steam) # # How to use: # # Edit the CS_USER-Var to the user running your cs-servers # Edit the DIR-Var to fit your system (just contains the path to the dir that contains hlds_run) # Edit the PARAMS-Var to fit your needs # - standard is startup as internet server # if you use multiple scripts on one system you should change the NAME-var (otherwise # all will be stopped if you run the script with "stop", and status will be useless) # # When this is done, copy the file to /etc/rc.d/init.d (or whereever your system stores the # scripts for starting the services) and set the execute permission. # Now you can link the script to your runlevel-dir, here's an example for runlevel 3: # ln -s /etc/rc.d/init.d/hlds /etc/rc.d/rc3.d/S90hlds # ln -s /etc/rc.d/init.d/hlds /etc/rc.d/rc3.d/K50hlds # or use update-rc.d if you got a system using that tool (like Debian, see manpage) # # Or use it manually like: # ./hlds start # ./hlds stop # # To see the server-console start the script with the parameter "watch". # # DOC by jwm (jwm@counter-strike.de) # !!!!!!!!!!!!!! CHANGE THIS TO THE USER YOU USE FOR YOUR SERVER !!!!!!!!!!!!!!! CS_USER=csserveruser PATH=/bin:/usr/bin:/sbin:/usr/sbin # # DON'T FORGET TO CHANGE THE PATH TO YOUR NEEDS! DIR=/hlds DAEMON=hlds_run # LAN server: # PARAMS="-game cstrike -nomaster -insecure +sv_lan 1 +maxplayers 16 +map de_dust" # Internet server: PARAMS="-game cstrike +map de_dust +maxplayers 12 -port 27015" NAME=csserver DESC="CS dedicated server" # No edits (should be) necessary beyond this line if [ ! -x `which awk` ]; then echo "You need awk for this script"; exit 1; fi if [ ! -x `which screen` ]; then echo "You need screen (the program, moron!) for this script"; exit 1; fi if [ `whoami` = root ] then usagetype=root else usagetype=nonroot fi start() { if [ ! -d $DIR ]; then echo " ... No such directory: $DIR!"; exit 1; fi if [ ! -x $DIR/$DAEMON ]; then echo "$DIR/$DAEMON does not exist or is not executable!"; exit 1; fi if status; then echo " ... $DESC: $NAME is already running!"; exit 1; fi case "$usagetype" in root) su - $CS_USER -c "cd $DIR ; screen -AmdS $NAME ./$DAEMON $PARAMS" ;; nonroot) cd $DIR ; screen -AmdS $NAME ./$DAEMON $PARAMS ;; esac } stop () { if ! status; then echo " ... $DESC $NAME could not be found. Probably not running."; exit 1; fi case "$usagetype" in root) tmp=$(su - $CS_USER -c "screen -ls" | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}') su - $CS_USER -c "screen -r $tmp -X quit" ;; nonroot) screen -r $(screen -ls | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}') -X quit ;; esac } status () { case "$usagetype" in root) su - $CS_USER -c "screen -ls" | grep [.]$NAME[[:space:]] > /dev/null ;; nonroot) screen -ls | grep [.]$NAME[[:space:]] > /dev/null ;; esac } watch () { if ! status; then echo "$DESC $NAME could not be found. Probably not running."; exit 1; fi case "$usagetype" in root) tmp=$(su - $CS_USER -c "screen -ls" | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}') su - $CS_USER -c "screen -r $tmp" ;; nonroot) screen -r $(screen -ls | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}') ;; esac } case "$1" in start) echo "Starting $DESC: $NAME" start echo " ... done." ;; stop) echo "Stopping $DESC: $NAME" stop echo " ... done." ;; restart) echo "Restarting $DESC: $NAME" status && stop start echo " ... done." ;; status) if status then echo "$DESC: $NAME is UP" else echo "$DESC: $NAME is DOWN" fi ;; watch) watch ;; *) echo "Usage: $0 {start|stop|status|restart|watch}\nWhile watching press ctrl-a, ctrl-d to stop watching without stopping the server." exit 1 ;; esac exit 0