#!/bin/sh
# Product: KFServer startup script
# Author: Sascha Greuel ([email protected])
# Usage: update-rc.d kfserver defaults
### BEGIN INIT INFO
# Provides: kfserver
# Required-Start: $syslog $local_fs $network $remote_fs
# Required-Stop: $syslog $local_fs $network $remote_fs
# Should-Start: $remote_fs $named
# Should-Stop: $remote_fs $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Killing Floor Server Daemon
# Description: Starts the Killing Floor Server Daemon
### END INIT INFO
############################ OPTIONS ######################################################
TITLE='KFServer Daemon'
DIR='/home/killingfloor/kfserver/system'
DAEMON='ucc-bin'
USER='root' # SHOULD BE CHANGED
GROUP='root' # SHOULD BE CHANGED
OPT='server KF-BioticsLab.rom?game=KFmod.KFGameType?VACSecured=true?MaxPlayers=6?AdminName=ADMIN?AdminPassword=PASSWORD -nohomedir'
LOGFILE='/var/log/kfserver.log'
PIDFILE='/var/run/kfserver.pid'
SUDO='/usr/bin/sudo'
AWK='/usr/bin/awk'
############################ END OPTIONS ##################################################
########################### NO NEED TO EDIT UNDER HERE ####################################
precheck() {
# Checking for sudo
if [ ! -x $SUDO ]; then
echo
echo "You do not have Sudo installed. Please install it and try again."
echo "$(date +"%a, %d %b - %H:%M:%S"): You do not have Sudo installed." >> $LOGFILE
echo
exit 1
fi
# Checking for awk
if [ ! -x $AWK ]; then
echo
echo "You do not have Awk installed. Please install it and try again."
echo "$(date +"%a, %d %b - %H:%M:%S"): You do not have awk installed." >> $LOGFILE
echo
exit 1
fi
# Checking for binary
if [ ! -x $DIR/$DAEMON ]; then
echo
echo "Can't find $DIR/$DAEMON."
echo "$(date +"%a, %d %b - %H:%M:%S"): Can't find $DIR/$DAEMON." >> $LOGFILE
echo
exit 1
fi
# Checking for user
if [ ! $(grep $USER /etc/passwd) ]; then
echo
echo "User '$USER' does not exist."
echo "$(date +"%a, %d %b - %H:%M:%S"): User '$USER' does not exist." >> $LOGFILE
echo
exit 1
fi
# Everything seems fine
echo
echo "Everything seems fine, try $0 start."
echo
exit 1
}
service_start() {
TEST=$(ps ax | grep $DAEMON | grep -v export | grep -v grep | wc -l)
# Server not running and no pid-file found
if [ "$TEST" = "0" ] && [ ! -f $PIDFILE ]; then
echo
echo "Starting $TITLE..."
echo "$(date +"%a, %d %b - %H:%M:%S"): Starting $TITLE..." >> $LOGFILE
cd $DIR
su $USER -c "$DAEMON $OPT" >> $LOGFILE 2>&1 &
sleep 1
sudo -u $USER ps ax | grep -v grep | grep $DAEMON | grep -v export | awk '{print $1}' > $PIDFILE
chown $USER:$GROUP $PIDFILE
echo "$TITLE screen process ID written to $PIDFILE."
echo "$TITLE started."
echo "$(date +"%a, %d %b - %H:%M:%S"): $TITLE started." >> $LOGFILE
echo
exit 1
fi
# Server not running and a pid-file is found
if [ "$TEST" = "0" ] && [ -f $PIDFILE ]; then
echo
echo "Server not running but pid-file present."
echo "Removing pid-file..."
echo "$(date +"%a, %d %b - %H:%M:%S"): Server not running but pid-file present." >> $LOGFILE
echo "$(date +"%a, %d %b - %H:%M:%S"): Removing pid-file..." >> $LOGFILE
rm $PIDFILE
echo "Old pid file removed."
echo "$(date +"%a, %d %b - %H:%M:%S"): Old pid file removed." >> $LOGFILE
echo
echo "Starting $TITLE..."
echo "$(date +"%a, %d %b - %H:%M:%S"): Starting $TITLE." >> $LOGFILE
cd $DIR
su $USER -c "$DAEMON $OPT" >> $LOGFILE 2>&1 &
sleep 1
sudo -u $USER ps ax | grep -v grep | grep $DAEMON | grep -v export | awk '{print $1}' > $PIDFILE
chown $USER:$GROUP $PIDFILE
echo "$TITLE screen process ID written to $PIDFILE."
echo "$TITLE started."
echo "$(date +"%a, %d %b - %H:%M:%S"): $TITLE started." >> $LOGFILE
echo
exit 1
fi
# Server running and no pid file-found, creates a new one!
if [ "$TEST" = "1" ] && [ ! -f $PIDFILE ]; then
echo
echo "Server is running but no pid file. Creating a new pid file..."
echo "$(date +"%a, %d %b - %H:%M:%S"): Server is running but no pid file. Creating a new pid file..." >> $LOGFILE
sudo -u $USER ps ax | grep -v grep | grep $DAEMON | grep -v export | awk '{print $1}' > $PIDFILE
chown $USER:$GROUP $PIDFILE
echo
echo "$TITLE is running and new pid-file created."
echo "$(date +"%a, %d %b - %H:%M:%S"): $TITLE is running and new pid-file created." >> $LOGFILE
echo
exit 1
fi
# Server running and pid-file found
if [ "$TEST" = "1" ] && [ -f $PIDFILE ]; then
echo
echo "$TITLE is already running."
echo "$(date +"%a, %d %b - %H:%M:%S"): $TITLE is already running." >> $LOGFILE
echo
exit 1
fi
}
service_stop() {
TEST1=$(ps ax | grep -v grep | grep $DAEMON | grep -v export | wc -l)
# Server is not running and no pid-file found
if [ "$TEST1" = "0" ] && [ ! -f $PIDFILE ]; then
echo
echo "$TITLE is not running."
echo "$(date +"%a, %d %b - %H:%M:%S"): $TITLE is not running." >> $LOGFILE
echo
fi
# Server is not running and pid-file found
if [ "$TEST1" = "0" ] && [ -f $PIDFILE ]; then
echo
echo "Server is not running but pid-file is present."
echo "Removing pid-file..."
echo "$(date +"%a, %d %b - %H:%M:%S"): Server is not running but pid-file is present." >> $LOGFILE
echo "$(date +"%a, %d %b - %H:%M:%S"): Removing pid-file..." >> $LOGFILE
rm $PIDFILE
echo
echo "Pid file removed."
echo "$(date +"%a, %d %b - %H:%M:%S"): Pid file removed." >> $LOGFILE
echo
fi
# Server is running but no pid-file found
if [ "$TEST1" = "1" ] && [ ! -f $PIDFILE ]; then
echo
echo "$TITLE is running but no pid file found."
echo "Stopping $TITLE..."
echo "$(date +"%a, %d %b - %H:%M:%S"): $TITLE is running but no pid file found." >> $LOGFILE
echo "$(date +"%a, %d %b - %H:%M:%S"): Stopping $TITLE..." >> $LOGFILE
sudo -u $USER ps ax | grep -v grep | grep $DAEMON | grep -v export | awk '{print $1}' > $PIDFILE
chown $USER:$GROUP $PIDFILE
for id in $(cat $PIDFILE)
do kill -TERM $id
echo "Killing process ID $id..."
echo "Removing $TITLE pid file..."
rm -rf $PIDFILE
break
done
echo "$TITLE stopped."
echo "$(date +"%a, %d %b - %H:%M:%S"): $TITLE stopped." >> $LOGFILE
echo
fi
# Server running and pid-file found
if [ "$TEST1" = "1" ] && [ -f $PIDFILE ]; then
echo
echo "Stopping $TITLE..."
echo "$(date +"%a, %d %b - %H:%M:%S"): Stopping $TITLE..." >> $LOGFILE
for id in $(cat $PIDFILE)
do kill -TERM $id
echo "Killing process ID $id..."
echo "Removing $TITLE pid file..."
rm -rf $PIDFILE
break
done
echo "$TITLE stopped."
echo "$(date +"%a, %d %b - %H:%M:%S"): $TITLE stopped." >> $LOGFILE
echo
fi
}
case "$1" in
'start')
service_start
;;
'stop')
service_stop
;;
'restart')
service_stop
sleep 5
service_start
;;
'precheck')
precheck
;;
*)
echo
echo "$0 start ## Starts the server"
echo "$0 stop ## Stops the server"
echo "$0 restart ## Restarts the server"
echo "$0 restart ## Restarts the server"
echo "$0 precheck ## Dependency check"
echo
esac
exit 0