792 lines
20 KiB
Plaintext
792 lines
20 KiB
Plaintext
|
#!/bin/bash
|
||
|
# HLstatsX Community Edition - Real-time player and clan rankings and statistics
|
||
|
# Copyleft (L) 2008-20XX Nicholas Hastings (nshastings@gmail.com)
|
||
|
# http://www.hlxce.com
|
||
|
#
|
||
|
# HLstatsX Community Edition is a continuation of
|
||
|
# ELstatsNEO - Real-time player and clan rankings and statistics
|
||
|
# Copyleft (L) 2008-20XX Malte Bayer (steam@neo-soft.org)
|
||
|
# http://ovrsized.neo-soft.org/
|
||
|
#
|
||
|
# ELstatsNEO is an very improved & enhanced - so called Ultra-Humongus Edition of HLstatsX
|
||
|
# HLstatsX - Real-time player and clan rankings and statistics for Half-Life 2
|
||
|
# http://www.hlstatsx.com/
|
||
|
# Copyright (C) 2005-2007 Tobias Oetzel (Tobi@hlstatsx.com)
|
||
|
#
|
||
|
# HLstatsX is an enhanced version of HLstats made by Simon Garner
|
||
|
# HLstats - Real-time player and clan rankings and statistics for Half-Life
|
||
|
# http://sourceforge.net/projects/hlstats/
|
||
|
# Copyright (C) 2001 Simon Garner
|
||
|
#
|
||
|
# This program is free software; you can redistribute it and/or
|
||
|
# modify it under the terms of the GNU General Public License
|
||
|
# as published by the Free Software Foundation; either version 2
|
||
|
# of the License, or (at your option) any later version.
|
||
|
#
|
||
|
# This program is distributed in the hope that it will be useful,
|
||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
# GNU General Public License for more details.
|
||
|
#
|
||
|
# You should have received a copy of the GNU General Public License
|
||
|
# along with this program; if not, write to the Free Software
|
||
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||
|
#
|
||
|
# For support and installation notes visit http://www.hlxcommunity.com
|
||
|
|
||
|
#------------------------------------------------------------------------------
|
||
|
# Usage
|
||
|
# Information on how to use this script can be found on our wiki:
|
||
|
# http://wiki.hlxce.com
|
||
|
#------------------------------------------------------------------------------
|
||
|
|
||
|
#------------------------------------------------------------------------------
|
||
|
# Script Configuration
|
||
|
# These parameters allow you to adjust various functions of the daemon.
|
||
|
# In general, they should not need to be modified.
|
||
|
# Please visit our wiki for more information: http://wiki.hlxce.com
|
||
|
|
||
|
#------------------------------------------------------------------------------
|
||
|
# SCRIPTPATH:
|
||
|
# File system path to daemon and supporting files
|
||
|
# NOTE: This is only needed if the other scripts files will be in another directory.
|
||
|
# In general, NO TOUCHY! :)
|
||
|
SCRIPTPATH=.
|
||
|
#------------------------------------------------------------------------------
|
||
|
|
||
|
#------------------------------------------------------------------------------
|
||
|
# CONFFILE:
|
||
|
# Specifies the configuration file (relative to SCRIPTPATH) to use for the daemon
|
||
|
CONFFILE=hlstats.conf
|
||
|
#------------------------------------------------------------------------------
|
||
|
|
||
|
#------------------------------------------------------------------------------
|
||
|
# DAEMON:
|
||
|
# Specifies the daemon Perl script to be used
|
||
|
DAEMON=hlstats.pl
|
||
|
#------------------------------------------------------------------------------
|
||
|
|
||
|
#------------------------------------------------------------------------------
|
||
|
# LOGDIR:
|
||
|
# Specifies the location to store logs
|
||
|
LOGDIR=${SCRIPTPATH}/logs
|
||
|
#------------------------------------------------------------------------------
|
||
|
|
||
|
#------------------------------------------------------------------------------
|
||
|
# LOGDATE:
|
||
|
# Specifies the date format to use in log file names
|
||
|
LOGDATE_FORMAT=%Y-%m-%d_%H-%M-%S
|
||
|
#------------------------------------------------------------------------------
|
||
|
|
||
|
#------------------------------------------------------------------------------
|
||
|
# PIDDIR:
|
||
|
# Specifies location to store daemon PID files
|
||
|
PIDDIR=${SCRIPTPATH}
|
||
|
#------------------------------------------------------------------------------
|
||
|
|
||
|
|
||
|
#------------------------------------------------------------------------------
|
||
|
# Nothing to modify below here
|
||
|
WEBSITE=http://www.hlxce.com
|
||
|
WIKI=http://wiki.hlxce.com
|
||
|
|
||
|
# Start output
|
||
|
echo
|
||
|
echo "HLstatsX:CE daemon control"
|
||
|
echo "${WEBSITE}"
|
||
|
echo "---------------------------"
|
||
|
|
||
|
# Change to directory of script
|
||
|
cd `dirname ${0}`
|
||
|
|
||
|
# Perform some initial checks before we encounter later errors
|
||
|
# Check if we can write to the SCRIPTPATH
|
||
|
if [ ! -w ${SCRIPTPATH} ]; then
|
||
|
echo "CRITICAL ERROR: Could not write to SCRIPTPATH: ${SCRIPTPATH}"
|
||
|
echo "Verify you have write access to this directory."
|
||
|
echo "Visit our wiki for more information: ${WIKI}."
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Check if the daemon perl script exists
|
||
|
if [ ! -f ${SCRIPTPATH}/${DAEMON} ]; then
|
||
|
echo "CRITICAL ERROR: Cannot access the daemon: ${DAEMON}"
|
||
|
echo "Verify that the daemon, and corresponding files, exist in ${SCRIPTPATH}"
|
||
|
echo "Visit our wiki for more information: ${WIKI}."
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Verify shebang line in daemon
|
||
|
SHEBANG=`head -n1 ${SCRIPTPATH}/${DAEMON}`
|
||
|
if [[ ${SHEBANG} =~ ^#! ]]; then
|
||
|
SHEBANG_BINARY=`echo "${SHEBANG}" | sed 's/^#!//'`
|
||
|
if [ ! -f ${SHEBANG_BINARY} ]; then
|
||
|
echo "CRITICAL ERROR: The path to Perl is incorrect in ${DAEMON}."
|
||
|
echo "Current Perl path in shebang: ${SHEBANG_BINARY}"
|
||
|
echo "Visit our wiki for more information: ${WIKI}."
|
||
|
echo
|
||
|
echo "Potential paths for Perl: "
|
||
|
echo `which perl`
|
||
|
exit 1
|
||
|
fi
|
||
|
else
|
||
|
echo "CRITICAL ERROR: The shebang line is incorrectly configured. Please verify that your shebang line is correct in ${DAEMON}."
|
||
|
echo "Current shebang line: ${SHEBANG}"
|
||
|
echo "Visit our wiki for more information: ${WIKI}."
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Create logdir if needed
|
||
|
if [ ! -d ${LOGDIR} ]; then
|
||
|
mkdir ${LOGDIR}
|
||
|
fi
|
||
|
|
||
|
# Make sure we can write to logdir
|
||
|
if [ ! -w ${LOGDIR} ]; then
|
||
|
echo "CRITICAL ERROR: Could not write to the log folder: ${LOGDIR}"
|
||
|
echo "Verify that you have write access to the log folder."
|
||
|
echo "Visit our wiki for more information: ${WIKI}."
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Daemon control functions
|
||
|
function start_daemon {
|
||
|
# This function handles the creation of a new daemon process.
|
||
|
# This function requires one parameter: PORT
|
||
|
# Returns:
|
||
|
# 0 - Daemon started
|
||
|
# 1 - Daemon failed to start
|
||
|
# 2 - Daemon already running
|
||
|
|
||
|
if [ ! $1 ]; then
|
||
|
echo "CRITICAL ERROR: No port was received on function start_daemon"
|
||
|
exit 1
|
||
|
else
|
||
|
local PORT=$1
|
||
|
fi
|
||
|
|
||
|
local LOG=${LOGDIR}/hlstats_${PORT}_`date +${LOGDATE_FORMAT}`
|
||
|
|
||
|
local PID=`get_pid ${PORT}`
|
||
|
# Check if a PID exists for this port number
|
||
|
if [ "${PID}" != "" ]; then
|
||
|
# PID exists -- check if the daemon is running.
|
||
|
kill -0 ${PID} &> /dev/null
|
||
|
if [ $? -eq 0 ]; then
|
||
|
# Daemon running -- nothing to do.
|
||
|
return 2
|
||
|
else
|
||
|
# Daemon not running -- remove pid.
|
||
|
remove_pidfile ${PORT}
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
# Start the daemon on requested port
|
||
|
echo -ne "Attempting to start HLstatsX:CE daemon on port ${PORT}..."
|
||
|
${SCRIPTPATH}/${DAEMON} --configfile=${CONFFILE} --port=${PORT} &> ${LOG} &
|
||
|
# Store PID in memory until we verify Daemon has launched
|
||
|
PID=$!
|
||
|
|
||
|
# Perform one quick check to see if PID is running
|
||
|
kill -0 ${PID} &> /dev/null
|
||
|
if [ $? -eq 0 ]; then
|
||
|
create_pidfile ${PORT} ${PID}
|
||
|
echo ""
|
||
|
return 0
|
||
|
else
|
||
|
# PID not detected in time, keep checking for 10 more seconds.
|
||
|
local i=1
|
||
|
while [ $i -le 10 ]
|
||
|
do
|
||
|
echo -ne " ${i}"
|
||
|
sleep 1
|
||
|
# Perform a kill check against saved PID
|
||
|
kill -0 ${PID} &> /dev/null
|
||
|
# Check results of pid test
|
||
|
if [ $? -eq 1 ]; then
|
||
|
# Process does not exist
|
||
|
let i++
|
||
|
if [ $i -eq 10 ]; then
|
||
|
# Daemon did not respond to start request within 10 seconds.
|
||
|
return 1
|
||
|
fi
|
||
|
else
|
||
|
# Daemon started successfully -- commit PID to file
|
||
|
create_pidfile ${PORT} ${PID}
|
||
|
echo ""
|
||
|
return 0
|
||
|
fi
|
||
|
done
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
function stop_daemon {
|
||
|
# This function handles shutting a daemon down.
|
||
|
# This function requires one parameter: PORT.
|
||
|
|
||
|
# Returns:
|
||
|
# 0 - Daemon gracefully stopped
|
||
|
# 1 - Daemon forcefully stopped
|
||
|
# 2 - Daemon could not be stopped
|
||
|
# 3 - No daemon to stop or PID missing
|
||
|
|
||
|
if [ ! $1 ]; then
|
||
|
echo "CRITICAL ERROR: No port was received on function stop_daemon"
|
||
|
exit 1
|
||
|
else
|
||
|
local PORT=$1
|
||
|
fi
|
||
|
|
||
|
local PID=`get_pid ${PORT}`
|
||
|
|
||
|
if [ ${PID} -eq 0 ]; then
|
||
|
return 3
|
||
|
fi
|
||
|
|
||
|
# Attempt to stop the daemon
|
||
|
echo -n "Attempting graceful shutdown of HLstatsX:CE daemon on port ${PORT} "
|
||
|
kill -INT ${PID} &> /dev/null
|
||
|
|
||
|
if [ $? -ne 0 ]; then
|
||
|
# Daemon is not running, purge the PID.
|
||
|
remove_pidfile ${PORT}
|
||
|
echo ""
|
||
|
return 3
|
||
|
else
|
||
|
# Found running PID -- perform a quick check before entering loop
|
||
|
kill -0 ${PID} &> /dev/null
|
||
|
if [ $? -eq 1 ]; then
|
||
|
# Daemon stopped, remove PID
|
||
|
remove_pidfile ${PORT}
|
||
|
echo ""
|
||
|
return 0
|
||
|
else
|
||
|
local i=1
|
||
|
while [ $i -le 10 ]
|
||
|
do
|
||
|
echo -n " ${i}"
|
||
|
sleep 1
|
||
|
# Perform a kill check against saved PID
|
||
|
kill -0 ${PID} &> /dev/null
|
||
|
if [ $? -eq 0 ]; then
|
||
|
# Daemon still operating
|
||
|
let i++
|
||
|
else
|
||
|
# Daemon stopped, remove PID
|
||
|
remove_pidfile ${PORT}
|
||
|
echo ""
|
||
|
return 0
|
||
|
fi
|
||
|
done
|
||
|
fi
|
||
|
|
||
|
# Daemon did not respond to shutdown, attempt a forced kill
|
||
|
echo ""
|
||
|
echo "WARNING: Daemon did not respond to a graceful shut down. Forcing a shut down on port ${PORT} "
|
||
|
local i=1
|
||
|
while [ $i -le 5 ]
|
||
|
do
|
||
|
kill -KILL ${PID} &> /dev/null
|
||
|
echo -n " ${i}"
|
||
|
sleep 1
|
||
|
|
||
|
# Check if PID is still present
|
||
|
kill -0 ${PID} &> /dev/null
|
||
|
|
||
|
if [ $? -eq 0 ]; then
|
||
|
# Daemon still operating
|
||
|
let i++
|
||
|
else
|
||
|
# Daemon stopped successfully.
|
||
|
remove_pidfile ${PORT}
|
||
|
echo ""
|
||
|
return 1
|
||
|
fi
|
||
|
done
|
||
|
return 2
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
function reload_daemon {
|
||
|
# This function handles reloading a daemon down.
|
||
|
# This function requires one parameter: PORT.
|
||
|
|
||
|
# Returns:
|
||
|
# 0 - Reload sent successfully
|
||
|
# 1 - Daemon not running or pid file missing
|
||
|
|
||
|
# Sanity check on incoming required parameter
|
||
|
if [ ! $1 ]; then
|
||
|
echo "CRITICAL ERROR: No port was received on function reload_daemon"
|
||
|
exit 1
|
||
|
else
|
||
|
local PORT=$1
|
||
|
fi
|
||
|
|
||
|
|
||
|
local PID=`get_pid ${PORT}`
|
||
|
# Check to verify the daemon is operational
|
||
|
if [ ${PID} -ne 0 ]; then
|
||
|
kill -0 ${PID} &> /dev/null
|
||
|
if [ $? -eq 0 ]; then
|
||
|
kill -HUP ${PID} &> /dev/null
|
||
|
return 0
|
||
|
else
|
||
|
return 1
|
||
|
fi
|
||
|
else
|
||
|
return 1
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
function check_port {
|
||
|
# This function verifies user input on the port number
|
||
|
# One argument is required
|
||
|
|
||
|
# Returns:
|
||
|
# 0 - Valid input
|
||
|
# 1 - Invalid Input (non-digit or not in UDP port range)
|
||
|
|
||
|
if [ $1 ]; then
|
||
|
# Perform regex test on input
|
||
|
echo ${1} | grep -q '^[0-9]\{1,5\}$'
|
||
|
# Check if within range and if grep test was successful.
|
||
|
if [ $? -eq 0 ] && [ $1 -le 65535 ] && [ $1 -ge 1 ]; then
|
||
|
return 0
|
||
|
else
|
||
|
return 1
|
||
|
fi
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
function get_status {
|
||
|
# This function performs a lookup for the PID on specified port and checks status
|
||
|
# Parameters:
|
||
|
# 1 - port
|
||
|
|
||
|
# Returns:
|
||
|
# 0 - PID is running
|
||
|
# 1 - PID is not running
|
||
|
# 2 - Invalid PID
|
||
|
|
||
|
if [ $1 ]; then
|
||
|
local PID=`get_pid ${1}`
|
||
|
if [ "${PID}" != "" ]; then
|
||
|
kill -0 ${PID} &> /dev/null
|
||
|
if [ $? -eq 0 ]; then
|
||
|
return 0
|
||
|
else
|
||
|
return 1
|
||
|
fi
|
||
|
else
|
||
|
return 2
|
||
|
fi
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
function create_pidfile {
|
||
|
# This function will handle the creation of a PID file for a corresponding port
|
||
|
# Parameters required:
|
||
|
# 1 - port number
|
||
|
# 2 - PID
|
||
|
|
||
|
# Returns:
|
||
|
# 0 - PID saved
|
||
|
# 1 - Unable to save PID
|
||
|
|
||
|
if [[ $1 && $2 ]]; then
|
||
|
PIDFILE=${PIDDIR}/hlstats_${1}.pid
|
||
|
echo ${2} > ${PIDFILE}
|
||
|
|
||
|
if [ "`cat ${PIDFILE}`" -eq "${2}" ]; then
|
||
|
return 0
|
||
|
else
|
||
|
return 1
|
||
|
fi
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
function remove_pidfile {
|
||
|
# This function will handle the deletion of a PID file for a corresponding port
|
||
|
# Parameters required:
|
||
|
# 1 - port number
|
||
|
|
||
|
# Returns:
|
||
|
# 0 - PID removed
|
||
|
# 1 - PID does not exist
|
||
|
|
||
|
if [ $1 ]; then
|
||
|
PIDFILE=${PIDDIR}/hlstats_${1}.pid
|
||
|
rm -f ${PIDFILE} &> /dev/null
|
||
|
if [ $? -eq 0 ]; then
|
||
|
return 0
|
||
|
else
|
||
|
return 1
|
||
|
fi
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
|
||
|
function get_pid {
|
||
|
# This function will echo out the found pid and return 0, or return 1 if it finds nothing
|
||
|
# Parameters required:
|
||
|
# 1 - port number
|
||
|
|
||
|
# Output
|
||
|
# Requested PID on return 0
|
||
|
|
||
|
# Returns:
|
||
|
# 0 - PID number for corresponding process
|
||
|
# 1 - No PID file for specified port
|
||
|
|
||
|
if [ $1 ]; then
|
||
|
PIDFILE=${PIDDIR}/hlstats_${1}.pid
|
||
|
PID=`cat ${PIDFILE} 2> /dev/null`
|
||
|
if [ $? -eq 0 ]; then
|
||
|
echo ${PID}
|
||
|
return 0
|
||
|
else
|
||
|
return 1
|
||
|
fi
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# Cleanup old legacy run_hlstats stuff
|
||
|
# Check if hlstats.pid exists (original pid from legacy run_hlstats)
|
||
|
if [ -f ${PIDDIR}/hlstats.pid ]; then
|
||
|
echo "WARNING: A old PID file has been detected. To prevent further troubles this daemon will be shut down."
|
||
|
kill -KILL `cat ${PIDDIR}/hlstats.pid` &> /dev/null
|
||
|
sleep 1
|
||
|
# Check if PID is dead
|
||
|
i=1
|
||
|
while [ $i -le 5 ]
|
||
|
do
|
||
|
kill -0 `cat ${PIDDIR}/hlstats.pid` &> /dev/null
|
||
|
if [ $? -eq 0 ]; then
|
||
|
# Daemon still operating
|
||
|
let i++
|
||
|
sleep 1
|
||
|
else
|
||
|
# Daemon stopped successfully.
|
||
|
rm -f ${PIDDIR}/hlstats.pid
|
||
|
echo ""
|
||
|
echo "HLstatsX:CE daemon has been forcefully stopped."
|
||
|
echo "Please re-run this script to control your daemon."
|
||
|
exit
|
||
|
fi
|
||
|
done
|
||
|
fi
|
||
|
|
||
|
# Daemon control case switcher
|
||
|
case "$1" in
|
||
|
start)
|
||
|
# Usage: run_hlstats start <# of daemons> <first port number> <port increment number>
|
||
|
# All arguments are optional
|
||
|
# Defaults: # of Daemons = 1; First port number = 27500; Port increment number = 1
|
||
|
NUMDAEMONS=1
|
||
|
STARTPORT=27500
|
||
|
INCREMENT=1
|
||
|
|
||
|
# Get user-specified number of daemons
|
||
|
if [ $2 ]; then
|
||
|
NUMDAEMONS=$2
|
||
|
fi
|
||
|
|
||
|
if [ $3 ]; then
|
||
|
check_port $3
|
||
|
if [ $? -eq 0 ]; then
|
||
|
STARTPORT=$3
|
||
|
else
|
||
|
echo "CRITICAL ERROR: An invalid port number was specified."
|
||
|
exit 1
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
if [ $4 ]; then
|
||
|
INCREMENT=$4
|
||
|
fi
|
||
|
|
||
|
# Saving this for a future release -- right now this would prevent people from running run_hlstats every few minutes to make sure their daemon is operational.
|
||
|
#else
|
||
|
# # Lookup the highest currently used port number
|
||
|
# LASTPORT=`ls ${PIDDIR} | egrep 'hlstats_[0-9]{1,5}.pid' | egrep -o '[0-9]{1,5}' | tail -1`
|
||
|
# if [ "${LASTPORT}" != "" ]; then
|
||
|
# # We have currently running daemons, to take the current highest port number and increment it
|
||
|
# let STARTPORT=LASTPORT+INCREMENT
|
||
|
# fi
|
||
|
#
|
||
|
#fi
|
||
|
|
||
|
i=0
|
||
|
CURRENTPORT=${STARTPORT}
|
||
|
while [ ${i} -lt ${NUMDAEMONS} ]
|
||
|
do
|
||
|
start_daemon ${CURRENTPORT}
|
||
|
case $? in
|
||
|
0)
|
||
|
echo "Daemon successfully started on port ${CURRENTPORT}"
|
||
|
let CURRENTPORT=CURRENTPORT+INCREMENT
|
||
|
let i++
|
||
|
;;
|
||
|
1)
|
||
|
echo "CRITICAL ERROR: Unable to start daemon on port ${CURRENTPORT}"
|
||
|
exit 1
|
||
|
;;
|
||
|
2)
|
||
|
echo "Daemon is already running on port ${CURRENTPORT}"
|
||
|
let CURRENTPORT=CURRENTPORT+INCREMENT
|
||
|
let i++
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
;;
|
||
|
|
||
|
stop)
|
||
|
# Usage: run_hlstats stop <port>
|
||
|
# All arguments are optional
|
||
|
# Defaults: port = ALL
|
||
|
|
||
|
if [ $2 ]; then
|
||
|
check_port $2
|
||
|
if [ $? -eq 0 ]; then
|
||
|
PORT=$2
|
||
|
else
|
||
|
echo "CRITICAL ERROR: An invalid port number was specified."
|
||
|
exit 1
|
||
|
fi
|
||
|
else
|
||
|
PORT=0
|
||
|
fi
|
||
|
|
||
|
# Stop a single daemon
|
||
|
if [ ${PORT} -ne 0 ]; then
|
||
|
stop_daemon ${PORT}
|
||
|
case $? in
|
||
|
0)
|
||
|
echo "Daemon gracefully stopped on port ${PORT}"
|
||
|
exit 0
|
||
|
;;
|
||
|
1)
|
||
|
echo "Daemon forcefully stopped on port ${PORT}"
|
||
|
exit 0
|
||
|
;;
|
||
|
2)
|
||
|
echo "WARNING: Daemon could not be stopped on port ${PORT}"
|
||
|
exit 1
|
||
|
;;
|
||
|
3)
|
||
|
echo "No daemon running on port ${PORT} or PID file is missing."
|
||
|
exit 1
|
||
|
;;
|
||
|
esac
|
||
|
fi
|
||
|
|
||
|
# Stop all daemons
|
||
|
PORTS=`ls ${PIDDIR} | egrep 'hlstats_[0-9]{1,5}.pid' | egrep -o '[0-9]{1,5}'`
|
||
|
if [ $? -eq 0 ]; then
|
||
|
for port in ${PORTS} ; do
|
||
|
stop_daemon ${port}
|
||
|
case $? in
|
||
|
0)
|
||
|
echo "Daemon gracefully stopped on port ${port}"
|
||
|
;;
|
||
|
1)
|
||
|
echo "Daemon forcefully stopped on port ${port}"
|
||
|
;;
|
||
|
2)
|
||
|
echo "WARNING: Daemon could not be stopped on port ${port}"
|
||
|
;;
|
||
|
3)
|
||
|
echo "No daemon running on port ${port} or PID file is missing."
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
else
|
||
|
echo "No daemons found running, or PID files are missing."
|
||
|
exit 1
|
||
|
fi
|
||
|
;;
|
||
|
|
||
|
restart)
|
||
|
# Usage: run_hlstats restart <port>
|
||
|
# All arguments are optional
|
||
|
# Defaults: port = ALL
|
||
|
|
||
|
if [ $2 ]; then
|
||
|
check_port $2
|
||
|
if [ $? -eq 0 ]; then
|
||
|
PORT=$2
|
||
|
else
|
||
|
echo "CRITICAL ERROR: An invalid port number was specified."
|
||
|
exit 1
|
||
|
fi
|
||
|
else
|
||
|
PORT=0
|
||
|
fi
|
||
|
|
||
|
# Handle individual restart request
|
||
|
if [ ${PORT} -ne 0 ]; then
|
||
|
stop_daemon ${PORT}
|
||
|
case $? in
|
||
|
0 | 1 | 3)
|
||
|
start_daemon ${PORT}
|
||
|
if [ $? -eq 0 ]; then
|
||
|
echo "Daemon successfully restarted on port ${PORT}"
|
||
|
exit 0
|
||
|
else
|
||
|
echo "CRITICAL ERROR: Failed to restart daemon on port ${PORT}"
|
||
|
exit 1
|
||
|
fi
|
||
|
;;
|
||
|
2)
|
||
|
echo "WARNING: Daemon could not be stopped on port ${port}"
|
||
|
exit 1
|
||
|
;;
|
||
|
esac
|
||
|
fi
|
||
|
|
||
|
# Restart all PIDs
|
||
|
PORTS=`ls ${PIDDIR} | egrep 'hlstats_[0-9]{1,5}.pid' | egrep -o '[0-9]{1,5}'`
|
||
|
if [ $? -eq 0 ]; then
|
||
|
for port in ${PORTS} ; do
|
||
|
stop_daemon ${port}
|
||
|
case $? in
|
||
|
0 | 1 | 3)
|
||
|
start_daemon ${port}
|
||
|
if [ $? -eq 0 ]; then
|
||
|
echo "Daemon successfully restarted on port ${port}"
|
||
|
else
|
||
|
echo "WARNING: Failed to restart daemon on port ${port}"
|
||
|
fi
|
||
|
;;
|
||
|
2)
|
||
|
echo "WARNING: Daemon could not be stopped on port ${port}"
|
||
|
exit 1
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
else
|
||
|
echo "WARNING: No HLstatsX:CE daemons currently running."
|
||
|
exit 1
|
||
|
fi
|
||
|
;;
|
||
|
|
||
|
reload)
|
||
|
# Usage: run_hlstats reload <port>
|
||
|
# All arguments are optional
|
||
|
# Defaults: port = ALL
|
||
|
|
||
|
if [ $2 ]; then
|
||
|
check_port $2
|
||
|
if [ $? -eq 0 ]; then
|
||
|
PORT=$2
|
||
|
else
|
||
|
echo "CRITICAL ERROR: An invalid port number was specified."
|
||
|
exit 1
|
||
|
fi
|
||
|
else
|
||
|
PORT=0
|
||
|
fi
|
||
|
|
||
|
# Handle individual reload request
|
||
|
if [ ${PORT} -ne 0 ]; then
|
||
|
reload_daemon ${PORT}
|
||
|
if [ $? -eq 0 ]; then
|
||
|
echo "Successfully reloaded daemon running on port ${PORT}"
|
||
|
exit 0
|
||
|
else
|
||
|
echo "WARNING: Unable to reload daemon on port ${PORT} (daemon might not be running)"
|
||
|
exit 1
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
# Reload all PIDs
|
||
|
PORTS=`ls ${PIDDIR} | egrep 'hlstats_[0-9]{1,5}.pid' | egrep -o '[0-9]{1,5}'`
|
||
|
if [ "${PORTS}" != "" ]; then
|
||
|
for port in ${PORTS} ; do
|
||
|
reload_daemon ${port}
|
||
|
if [ $? -eq 0 ]; then
|
||
|
echo "Successfully reloaded daemon running on port ${port}"
|
||
|
else
|
||
|
echo "WARNING: Unable to reload daemon on port ${port} (daemon might not be running)"
|
||
|
fi
|
||
|
done
|
||
|
else
|
||
|
echo "WARNING: No HLstatsX:CE daemons currently running."
|
||
|
exit 1
|
||
|
fi
|
||
|
;;
|
||
|
|
||
|
status)
|
||
|
# Usage: run_hlstats status <port>
|
||
|
# All arguments are optional
|
||
|
# Defaults: port = ALL
|
||
|
|
||
|
if [ $2 ]; then
|
||
|
check_port $2
|
||
|
if [ $? -eq 0 ]; then
|
||
|
PORT=$2
|
||
|
else
|
||
|
echo "CRITICAL ERROR: An invalid port number was specified."
|
||
|
exit 1
|
||
|
fi
|
||
|
else
|
||
|
PORT=0
|
||
|
fi
|
||
|
|
||
|
# Handle individual status request
|
||
|
if [ ${PORT} -ne 0 ]; then
|
||
|
get_status ${PORT}
|
||
|
case $? in
|
||
|
0)
|
||
|
echo "Daemon on port ${PORT} is currently running."
|
||
|
exit 0
|
||
|
;;
|
||
|
1)
|
||
|
echo "A stale process was found for daemon on port ${PORT}."
|
||
|
exit 0
|
||
|
;;
|
||
|
2)
|
||
|
echo "There is no daemon running on port ${PORT}."
|
||
|
exit 0
|
||
|
;;
|
||
|
esac
|
||
|
fi
|
||
|
|
||
|
# Reload all PIDs
|
||
|
PORTS=`ls ${PIDDIR} | egrep 'hlstats_[0-9]{1,5}.pid' | egrep -o '[0-9]{1,5}'`
|
||
|
if [ "${PORTS}" != "" ]; then
|
||
|
for port in ${PORTS} ; do
|
||
|
get_status ${port}
|
||
|
case $? in
|
||
|
0)
|
||
|
echo "Daemon on port ${port} is currently running."
|
||
|
;;
|
||
|
1)
|
||
|
echo "A stale process was found for daemon on port ${port}. It has been removed."
|
||
|
;;
|
||
|
2)
|
||
|
echo "There is no daemon running on port ${port}."
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
else
|
||
|
echo "WARNING: No HLstatsX:CE daemons currently running."
|
||
|
exit 1
|
||
|
fi
|
||
|
;;
|
||
|
|
||
|
*)
|
||
|
echo "Usage"
|
||
|
echo "All optional arguments are in <>. The default is in ()."
|
||
|
echo ""
|
||
|
echo -e "\trun_hlstats start <number of daemons (1)> <starting port number (27500)> <port increment (1)>"
|
||
|
echo -e "\trun_hlstats stop <port # of daemon to stop (ALL)>"
|
||
|
echo -e "\trun_hlstats status <port # of daemon to check status of (ALL)>"
|
||
|
echo -e "\trun_hlstats restart <port # of daemon to restart (ALL)>"
|
||
|
echo -e "\trun_hlstats reload <port # of daemon to reload (ALL)>"
|
||
|
;;
|
||
|
esac
|
||
|
exit
|
||
|
|