Counterstrike Source Scripts

With these scripts I maintain a CSS server.

My server runs on FreeBSD. Since the CSS software is not available as source, I decided to run it within a jail. It runs under linux-compat kernel module.

There is a simple script in C just calls the startupscript:

=begin text

#!/bin/sh USER=CHANGETHIS script=/home/$USER/bin/css sucmd="su - $USER"

case $1 in start) $sucmd $script tsstart $sucmd $script start ;; stop) $sucmd $script tsstop $sucmd $script stop ;; esac

=end text

(Change the variable USER to your jail user under which the CSS will run)

The C script looks like this:

=begin text


# start and maintain the counter strike source server # copyright (c) 2006 #

USER=CHANGETHIS screenname="CounterStrike" screenbase="screen -S $screenname" screenstart="-A -m -d" srcdir="/home/$USER/css" srcbin="srcds_run" srcpid="$srcdir/" slots=20 #srcplugs="-debug" srcopts="-game cstrike -pidfile $srcpid $srcplugs +map de_dust +maxplayers $slots -autoupdate" PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin" myself="Counter Strike Source Server" uid="1003" ts="Team Speak Linux Server" tsbase="/home/$USER/teamspeak" tsbin="teamspeak2-server_startscript"

runas=id -u if test "$runas" != "$uid"; then echo "$0 must be executed under uid $uid ($USER)!" exit 1 fi

ts_start() { cd $tsbase ./$tsbin start }

ts_stop() { cd $tsbase ./$tsbin stop }

ts_restart() { cd $tsbase ./$tsbin restart }

ts_status() { echo -n " TS Process: " for pid in ps -U $USER | grep server_linux | grep -v grep | awk '{print $1}' ; do echo -n "$pid "; done echo }

css_start() { if test -f "$srcpid"; then pid=cat $srcpid if ps axu | grep $pid | grep -v grep > /dev/null 2>&1; then echo "$myself is already running [$pid]" exit 1 else echo "$myself crashed. Forcing restart" rm -f $srcpid fi fi echo -n "$myself ..." cd $srcdir && $screenbase $screenstart ./$srcbin $srcopts echo " started." }

css_restart() { if test -f "$srcpid"; then pid=cat $srcpid if ps axu | grep $pid | grep -v grep > /dev/null 2>&1; then echo -n "$myself ..." kill $pid echo " restarted." else echo "$myself is not running!" rm -f $srcpid exit 1 fi else echo "$myself is not running - no pidfile found!" fi }

css_stop() { pid=ps -U $USER | grep srcds_run | grep -v $screenname | grep -v grep | awk '{print $1}' if test -n "$pid"; then kill $pid echo "CSS Stopped" else echo "CSS not running" fi }

css_status() { echo -n "Screensession: " screen -list |grep $screenname echo -n " CSS Process: " ps -U $USER | grep $srcbin | grep -v grep | awk '{print $1, $2, $3, $4}' }

css_console() { screen -S $screenname -r }

css_paint() { clear echo echo " Counter Strike Source Server" echo echo "----------------------[ Status ]----------------------" css_status ts_status echo "----------------------[ Status ]----------------------" echo echo " 1 Counterstrike Server Console" echo " 2 Counterstrike Server Stoppen" echo " 3 Counterstrike Server Starten" echo " * 4 Counterstrike Server Neu Starten (restart)" echo " 5 Teamspeak Server Stoppen" echo " 6 Teamspeak Server Starten" echo " * 7 Teamspeak Server Neu Starten (restart)" echo " 8 Bash Command Shell" echo " q Ende" echo }

css_menu() { while :; do css_paint echo -n "> " read cmd if test -n "$cmd"; then case $cmd in 1) css_console;; 2) css_stop;; 3) css_start;; 4) css_restart;; 5) ts_stop;; 6) ts_start;; 7) ts_restart;; 8) bash;; q) exit;; *) echo "invalid input!";; esac echo -n "press any key to continue> " read enter fi done }

if test -n "$1"; then case $1 in start) css_start;; stop) css_stop;; restart) css_restart;; status) css_status;; tsstart) ts_start;; tsstop) ts_stop;; tsrestart) ts_restart;; tsstatus) ts_status;; *) echo "usage: $0 { start | stop | restart | status }" echo " $0 { tsstart | tsstop | tsrestart | tsstatus }" ;; esac else css_menu fi

=end text

This script allows to start/stop/restart the TS and CSS servers. It also provides an simple interactive menu for these jobs. Please note, the CSS server will run inside a screen session, because this crappy piece of shit doesn't detach from terminal after being started. I wonder why it's called a "server". However, you can connect anytime to this screen session and enter commands or something.

A last note: be prepared that in case you activated the autoupdate feature of CSS (which you should), you shall have a copy of the C file, because the autoupdater overwrites it.

Finally: the whole shit is not supported. Use for your own risk. Dont ask me questions about using it on linux, other environments or the like. Instead, try to learn a little bit about unix!