lfs/bootscripts/contrib/lsb-v3/init.d/lfs-functions
DJ Lucas 010d1082d8 See contrib/lsb-v3/ChangeLog
git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@8555 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689
2008-08-31 06:24:27 +00:00

215 lines
7.3 KiB
Plaintext

# Begin /etc/init.d/lfs-functions
# Provides LFS specific functions for LSB style bootscripts
################################# chkstat() ###################################
# chk_stat checks the status of a script by checking for both a binary file #
# to execute, and if set, a config file that may be needed for the program #
# to run successfully. The calling script will exit with a return value of 5 #
# if the binary does not exist, and a value of 6 if the needed config file is #
# unavailable as per LSB requirements. This function accepts zero, one, or #
# two string arguments. If arguments are passed, the first must be a bin #
# file. If a second argument is passed, it is interpreted as the config #
# file. Optionally, zero arguments can be passed if BIN_FILE, and optinally #
# CONFIG_FILE are set in the calling script. #
###############################################################################
chk_stat()
{
if [ "${#}" -gt "0" -a "${#}" -lt "3" ]; then
BIN_FILE="${1}"
if [ -z "${2}" ]; then
CONFIG_FILE=""
else
CONFIG_FILE="${2}"
fi
elif [ -z "${BIN_FILE}" ]; then
echo "Usage: 'chk_stat BIN_FILE CONFIG_FILE'"
exit 1 # Generic Error
fi
if [ ! -e "${BIN_FILE}" ]; then
log_failure_msg "${BIN_FILE} not installed" &&
exit 5
fi
if [ ! -z "${CONFIG_FILE}" ]; then
if [ ! -e "${CONFIG_FILE}" ]; then
log_failure_msg "${CONFIG_FILE} does not exist" &&
exit 6
fi
fi
}
################################ loadproc() ###################################
# loadproc is just a wraper to start_daemon for simple scripts, which will #
# require no arguments if $BIN_FILE is set. #
###############################################################################
loadproc()
{
start_daemon "${BIN_FILE}" "${@}"
}
################################ endproc() ####################################
# endproc, like loadproc, is just a wraper to killproc for simplicity and is #
# dependent on $BIN_FILE being set. #
###############################################################################
endproc()
{
killproc "${BIN_FILE}" "${@}"
}
############################### statusproc() ##################################
# statusproc checks the status of a particular binary and displays the #
# appropriate message (running or not running) and exits on the return value #
# of pidofproc. This function accepts two string arguments or zero arguments #
# if BIN_FILE and MESSAGE are set, else it requires the bin file as the first #
# argument, and the message as the second. Both must be enclosed in quotes. #
###############################################################################
statusproc()
{
if [ "${#}" -gt "0" -a "${#}" -lt "3" ]; then
BIN_FILE="${1}"
MESSAGE="${2}"
elif [ -z "${BIN_FILE}" -o -z "${MESSAGE}" ]; then
echo "Usage: 'statusproc BIN_FILE MESSAGE'"
exit 1 # Generic Error
fi
pidlist=`pidofproc "${BIN_FILE}"`
STATUS=$?
echo "Checking ${MESSAGE} status:"
if [ "${STATUS}" = "0" ]; then
log_success_msg "Running with PID(s) ${pidlist}"
else
log_warning_msg "Not running!"
fi
return "${STATUS}"
}
############################### reloadproc() ##################################
# reloadproc sends a HUP signal to the running program (relaod configuration) #
# It optionally, using the -force switch, checks the status of a particular #
# program and starts it if it is not already running. This function accepts #
# one optional switch (must be the first argument), and either two, or zero #
# string arguments. If BIN_FILE and MESSAGE are set in the script's #
# environment, it will use those values, else it requires the bin file as #
# the first argument (following -force if used), and the message as the #
# second. Both must be enclosed in quotes. If the force option is used, it #
# follows the LSB definition of 'force-reload' - the program is started if #
# not already running. #
###############################################################################
reloadproc()
{
local force="0"
if [ "${#}" -gt "0" -a "${1}" = "-force" ]; then
force="1"
shift 1
fi
if [ "${#}" -gt "0" -a "${#}" -lt "3" ]; then
BIN_FILE="${1}"
MESSAGE="${2}"
elif [ -z "${BIN_FILE}" -o -z "${MESSAGE}" ]; then
echo "Usage: 'reloadproc BIN_FILE MESSAGE'"
exit 1 # Generic Error
fi
}
############################## evaluate_retval() ###############################
# evaluate_retval requires that you pass exactly one evaluation parameter of #
# (start, stop, other) based on the previous action that is being evaluated. #
# This function is intended for use with start_daemon and killproc to #
# interpret the LSB exit codes properly, othewise the checks only for success #
# or failure. #
################################################################################
evaluate_retval()
{
local error_value="${?}"
# Handle LSB defined return values
case "${1}" in
start)
case "${error_value}" in
0)
log_success_msg "Starting ${MESSAGE} "
return "${error_value}"
;;
2)
log_failure_msg "Starting ${MESSAGE} Error: Invalid argument!"
return "${error_value}"
;;
5)
log_failure_msg "Starting ${MESSAGE} Error: Not available!"
return "${error_value}"
;;
*)
log_failure_msg "Starting ${MESSAGE} Error: General failure!"
return "${error_value}"
;;
esac
;;
stop)
case "${error_value}" in
0)
log_success_msg "Stopping ${MESSAGE} "
return "${error_value}"
;;
2)
log_failure_msg "Stopping ${MESSAGE} Error: Invalid argument!"
return "${error_value}"
;;
5)
log_failure_msg "Stopping ${MESSAGE} Error: Not available!"
return "${error_value}"
;;
7)
log_warning_msg "Stopping ${MESSAGE} Warning: Not running!"
return "${error_value}"
;;
*)
log_failure_msg "Stopping ${MESSAGE} Error: General failure!"
return "${error_value}"
;;
esac
;;
force-reload)
message="Forcefully reloading "
;;
reload)
message="Reloading "
;;
restart)
message="Restarting "
;;
try-restart)
message="Trying restart "
;;
standard)
# $message or $MESSAGE must be set, but not both in order
# to use the 'standard' target.
;;
esac
# Print messages for the generic force-reload, reload, restart,
# and try-restart targets
if [ "${error_value}" = "0" ]
then
log_success_msg "${message}${MESSAGE} "
return "${error_value}"
else
log_failure_msg "${message}${MESSAGE} "
return "${error_value}"
fi
}