SRCDS-Start Stop Restart

Od HLDS.pl
Wersja Trawiator (dyskusja | edycje) z dnia 22:01, 17 gru 2007
(różn.) ← poprzednia wersja | zobacz aktualną wersję (różn.) | następna wersja → (różn.)
Skocz do: nawigacji, wyszukiwania

UWAGA ten artykuł jest wyłącznie pod Linuksa


  • startscript
#!/bin/sh
# Start/stop/restart a Valve dedicated server
# All configuration changes should occur in <scriptname>.conf. Only change the name of the call below if you are using a different name for the script
. ./startscript.conf
 
service_start() {
 
# Checking to see if root is the current user you are using to start the script
if [ $DSUSER == 'root' ]; then
# Oops is caught you running as root shame on you >:). Well you gotta tell it yes or no.	
	echo -e "You are currently running as $DSUSER, This is dangerous and should be avoided\nAre you sure you want to do this? (yes or no please):"
	read
	case "$REPLY" in
	yes)
# Looks like you chose to run it as root... The script hates you for it but hey do whatever you feel hehe
		echo -e "Alright proceeding running program as $DSUSER"
 
# Currently checking to see if the pid files that is creates during the startup process exsist. If neither exsists it will go ahead.
		if [ ! -f $DSPATH/$DSNAME.pid ] && [ ! -f $DSPATH/dod/$DSNAMESHORT.pid ]; then
			if [ -x $DSPATH/$DSNAME ]; then
				echo "Starting $TITLE: Services"
				cd $DSPATH; $DSINTERFACE $DSPATH/$DSNAME $DSOPTS
				sleep 1 # prevent race condition on SMP kernels
				ps -ef | grep SCREEN | grep "$CLIENT" | grep -v grep | awk '{ print $2 }' > $DSNAME.pid # Finding and writing current process id of the screen process
				echo -e "$DSNAMESHORT Process ID Written to $DSNAME.pid\n$DSGAME Server Process ID Written to $DSNAMESHORT.pid"
			fi
		else
			echo -e "Server is Already running you sure you want to start this up?" # It found that one of the pid files exsists perhaps the server did not shut down with the script being used... if this is the case use <scriptname> clean to fix it
		fi
	;;
	no)
# Good choice you did not choose to run as root
		echo -e "Wise choice please login as a different user or run this with su - <username> -c 'command'. "
	;;
	*)
# What in the heck is wrong with you didn't I say YES or NO
		echo -e "I don't recognize $REPLY as a valid yes or no answer. Please user only yes or no only"
	;;
	esac
# The script found you were not running as root so it is running like normal. Uses same calls to activate script like above just no input is require to start it this time. You should not be prompted for yes or no if yo uare not root running it this time
else
		if [ ! -f $DSPATH/$DSNAME.pid ] && [ ! -f $DSPATH/$DSNAMESHORT.pid ]; then
			if [ -x $DSPATH/$DSNAME ]; then
				echo "Starting $TITLE: Services"
				echo "$DSPATH/$DSNAME $DSOPTS"
				cd $DSPATH; $DSINTERFACE $DSPATH/$DSNAME $DSOPTS
				sleep 1 # prevent race condition on SMP kernels
				ps -ef | grep SCREEN | grep "$CLIENT" | grep -v grep | awk '{ print $2 }' > $DSNAME.pid
				echo -e "$DSNAME Process ID Written to $DSNAME.pid\n$DSNAMESHORT Server Process ID Written to $DSNAMESHORT.pid"
			fi
		else
			echo -e "Server is Already running you sure you want to start this up?"
		fi
fi
	
}
 
service_stop() {
 
# This script is just getting the process id of the server that was written to the file it created earlier so it can kill it.   
    for vdspid in $(cat $DSPATH/$DSNAME.pid);
      do
        kill $vdspid;
	rm -rf $DSNAME.pid;
        break;
    done
    rm -rf $DSPATH/dod/$DSNAMESHORT.pid;
# This command is just clearing out any *DEAD* screen sessions. Those can become a pain really quick
    screen -wipe 1> /dev/null 2> /dev/null
}
 
service_restart() {
 
# Simple enough. It is making a call to the stop service and then it waits for a second then it calls the start script
 
  service_stop
  sleep 1
  service_start
}
 
service_status() {
# This is checking to see if $DSNAME.pid file exsists
if [ -f $DSPATH/$DSNAME.pid ]; then
# Pulling in the values to evaulate if they are true or not
PROCESSRUN=`cat $DSPATH/$DSNAME.pid`
PROCSERV=`ps -ef | grep SCREEN | grep "$CLIENT" | grep -v grep | awk '{ print $2 }'`
 
# This is checking to see if the currently running process ID matches with the pid created when the server was started
	if [ "$PROCESSRUN" == "$PROCSERV" ]; then
	echo -e "$DSNAME is running on process `cat $DSPATH/$DSNAME.pid`\n" # It found this process ID matches and is outputting what it is currently running on
	fi
else
	echo -e "$DSNAME is offline. This could be due to someone or something else that killed it." # Apparently the server is offline 
			if [ "$PROCSERV" ]; then
			echo -e "However a Process Matching the same criteria was found at process ID $PROCSERV....\n Might be worth a investigation" # Wait, it found another server matching the same criteria running under a different process ID.
			fi
fi
 
#Checking to see if this file exsists
 
if [ -f $DSPATH/$DSNAME.pid ]; then
echo "$DSNAMESHORT Server is running on process `cat $DSPATH/dod/$DSNAMESHORT.pid`" # It found the file exsists and is outputting the info
else 
echo -e "$DSGAME Server is offline. This could be due to someone or something else that killed it\nor it is just rebooting" #Oops the server is active or the pid file got deleted.
fi
}
 
# This service is used watch the process that is currently running
service_watch(){
 
# Check if there is someone already attached
 
if [ `screen -wipe | grep $CLIENT | grep -v grep | awk '{ print $2 }'` == '(Attached)' ]; then
	echo -e "Someone is already attached to the console of the server.\n Might want to check who" # Oops someone is already attached to it..... better wait your turn or go chew someone $%^ out
else
 
# Looks like noone is watching it right now.... peeping tom time !!!
 
	screen -r $CLIENT 
fi
}
 
# This service is used to clean house if the script is reporting erroneous info.
 
service_clean(){
 
rm -rf *.pid;
rm -rf $DSPATH/dod/*.pid;
screen -wipe 1> /dev/null 2> /dev/null;
}
 
case "$1" in
'start')
  service_start
  ;;
'stop')
  service_stop
  ;;
'restart')
  service_restart
  ;;
'status')
  service_status
  ;;
'watch')
  service_watch
  ;;
'clean')
  service_clean
  ;;
*)
  echo "usage $0 start|stop|restart|status|watch|clean"
esac
  • startscript.conf
#!/bin/sh
 
CLIENT='test';                # Unique handle this server uses. Hostname
                              # can be reset in your server.cfg
 
TITLE='Test Script';          # Name that is shown during start-up messages
DSPATH='/home/gameserver/hldss/dods';    # Where Steam is installed
DSIP='70.85.36.186';		# IP address you want to use to start server with
DSNAME='srcds_run';           # Either hlds_run or srcds_run
DSNAMESHORT='source';		# Label only
DSGAME='dod';               # Game type (valve, cstrike, czero, etc)
DSIMAP='dod_donner';             # Load this map initially
DSPORT='27015';               # Game server listens on this UDP port
DSSIZE='21';                  # Maximum number of players to allow
DSUSER=`whoami`;             # Which user is running the process
 
 
# Don't edit this unless you need the script to do something special
DSOPTS="-game $DSGAME +hostname \"$CLIENT\" +map $DSIMAP +ip $DSIP -port $DSPORT -autoupdate +maxplayers $DSSIZE -pidfile $DSNAMESHORT.pid"
 
# This is the caller for the screen process. Only change if this is different from where your screen process currently resides.
DSINTERFACE="/usr/bin/screen -A -m -d -S $CLIENT"
Osobiste
Przestrzenie nazw
Warianty
Działania
HLDS.pl - Menu:
Inne
IRC
Inne sekcje:
Znajomi:
Narzędzia