diff options
Diffstat (limited to 'lsb-bootscripts/lib/lsb/init-functions')
-rw-r--r-- | lsb-bootscripts/lib/lsb/init-functions | 496 |
1 files changed, 374 insertions, 122 deletions
diff --git a/lsb-bootscripts/lib/lsb/init-functions b/lsb-bootscripts/lib/lsb/init-functions index 338f3e00b..39e4d2318 100644 --- a/lsb-bootscripts/lib/lsb/init-functions +++ b/lsb-bootscripts/lib/lsb/init-functions @@ -8,29 +8,24 @@ if [ "${RC_BASE}" = "" ]; then . /etc/default/rc fi -# Source the distro functions file -if [ "${DISTRO_MINI}" != "" ]; then - . "${RC_BASE}/init.d/${DISTRO_MINI}-functions" -fi - -################################################################################ -# start_daemon() # -# Usage: start_daemon [-f] [-n nicelevel] [-p pidfile] pathname [args...] # -# # -# Purpose: This runs the specified program as a daemon # -# # -# Inputs: -f: (force) run the program even if it is already running. # -# -n nicelevel: specify a nice level. See 'man nice(1)'. # -# -p pidfile: use the specified file to determine PIDs. # -# pathname: the complete path to the specified program # -# args: additional arguments passed to the program (pathname) # -# # -# Return values (as defined by LSB exit codes): # -# 0 - program is running or service is OK # -# 1 - generic or unspecified error # -# 2 - invalid or excessive argument(s) # -# 5 - program is not installed # -################################################################################ +############################################################################### +# start_daemon() # +# Usage: start_daemon [-f] [-n nicelevel] [-p pidfile] pathname [args...] # +# # +# Purpose: This runs the specified program as a daemon # +# # +# Inputs: -f: (force) run the program even if it is already running. # +# -n nicelevel: specify a nice level. See 'man nice(1)'. # +# -p pidfile: use the specified file to determine PIDs. # +# pathname: the complete path to the specified program # +# args: additional arguments passed to the program (pathname) # +# # +# Return values (as defined by LSB exit codes): # +# 0 - program is running or service is OK # +# 1 - generic or unspecified error # +# 2 - invalid or excessive argument(s) # +# 5 - program is not installed # +############################################################################### start_daemon() { local force="" @@ -127,25 +122,25 @@ start_daemon() } -################################################################################ -# killproc() # -# Usage: killproc [-p pidfile] pathname [signal] # -# # -# Purpose: Send control signals to running processes # -# # -# Inputs: -p pidfile, uses the specified pidfile # -# pathname, pathname to the specified program # -# signal, send this signal to pathname # -# # -# Return values (as defined by LSB exit codes): # -# 0 - program (pathname) has stopped/is already stopped or a # -# running program has been sent specified signal and stopped # -# successfully # -# 1 - generic or unspecified error # -# 2 - invalid or excessive argument(s) # -# 5 - program is not installed # -# 7 - program is not running and a signal was supplied # -################################################################################ +############################################################################### +# killproc() # +# Usage: killproc [-p pidfile] pathname [signal] # +# # +# Purpose: Send control signals to running processes # +# # +# Inputs: -p pidfile, uses the specified pidfile # +# pathname, pathname to the specified program # +# signal, send this signal to pathname # +# # +# Return values (as defined by LSB exit codes): # +# 0 - program (pathname) has stopped/is already stopped or a # +# running program has been sent specified signal and stopped # +# successfully # +# 1 - generic or unspecified error # +# 2 - invalid or excessive argument(s) # +# 5 - program is not installed # +# 7 - program is not running and a signal was supplied # +############################################################################### killproc() { local pidfile @@ -335,20 +330,20 @@ killproc() fi } -################################################################################ -# pidofproc() # -# Usage: pidofproc [-p pidfile] pathname # -# # -# Purpose: This function returns one or more pid(s) for a particular daemon # -# # -# Inputs: -p pidfile, use the specified pidfile instead of pidof # -# pathname, path to the specified program # -# # -# Return values (as defined by LSB status codes): # -# 0 - Success (PIDs to stdout) # -# 1 - Program is dead, PID file still exists (remaining PIDs output) # -# 3 - Program is not running (no output) # -################################################################################ +############################################################################### +# pidofproc() # +# Usage: pidofproc [-p pidfile] pathname # +# # +# Purpose: This function returns one or more pid(s) for a particular daemon # +# # +# Inputs: -p pidfile, use the specified pidfile instead of pidof # +# pathname, path to the specified program # +# # +# Return values (as defined by LSB status codes): # +# 0 - Success (PIDs to stdout) # +# 1 - Program is dead, PID file still exists (remaining PIDs output) # +# 3 - Program is not running (no output) # +############################################################################### pidofproc() { @@ -427,18 +422,19 @@ local exitstatus="0" return "${exitstatus}" fi } -################################################################################ -# log_success_msg() # -# Usage: log_success_msg [$MESSAGE | "message"] # -# # -# Purpose: Print a successful status message to the screen and optionally # -# a boot log file. # -# # -# Inputs: accepts one string value, either a quoted string or optionally # -# the value of $MESSAGE if set in the running environment. # -# # -# Return values: Not used # -################################################################################ + +############################################################################### +# log_success_msg() # +# Usage: log_success_msg [$MESSAGE | "message"] # +# # +# Purpose: Print a successful status message to the screen and optionally # +# a boot log file. # +# # +# Inputs: accepts one string value, either a quoted string or optionally # +# the value of $MESSAGE if set in the running environment. # +# # +# Return values: Not used # +############################################################################### log_success_msg() { echo -n -e "${PREFIX_SUCCESS}${@}" @@ -456,18 +452,18 @@ log_success_msg() return 0 } -################################################################################ -# log_failure_msg() # -# Usage: log_failure_msg [$MESSAGE | "message"] # -# # -# Purpose: Print a failure status message to the screen and optionally # -# a boot log file. # -# # -# Inputs: accepts one string value, either a quoted string or optionally # -# the value of $MESSAGE if set in the running environment. # -# # -# Return values: Not used # -################################################################################ +############################################################################### +# log_failure_msg() # +# Usage: log_failure_msg [$MESSAGE | "message"] # +# # +# Purpose: Print a failure status message to the screen and optionally # +# a boot log file. # +# # +# Inputs: accepts one string value, either a quoted string or optionally # +# the value of $MESSAGE if set in the running environment. # +# # +# Return values: Not used # +############################################################################### log_failure_msg() { echo -n -e "${PREFIX_FAILURE}${@}" @@ -485,18 +481,18 @@ log_failure_msg() return 0 } -################################################################################ -# log_warning_msg() # -# Usage: log_warning_msg [$MESSAGE | "message"] # -# # -# Purpose: Print a warning status message to the screen and optionally # -# a boot log file. # -# # -# Inputs: accepts one string value, either a quoted string or optionally # -# the value of $MESSAGE if set in the running environment. # -# # -# Return values: Not used # -################################################################################ +############################################################################### +# log_warning_msg() # +# Usage: log_warning_msg [$MESSAGE | "message"] # +# # +# Purpose: Print a warning status message to the screen and optionally # +# a boot log file. # +# # +# Inputs: accepts one string value, either a quoted string or optionally # +# the value of $MESSAGE if set in the running environment. # +# # +# Return values: Not used # +############################################################################### log_warning_msg() { echo -n -e "${PREFIX_WARNING}${@}" @@ -514,20 +510,22 @@ log_warning_msg() return 0 } -################################################################################ -# check_signal() # -# Usage: check_signal [ -{signal} | {signal} ] # -# # -# Purpose: Check for a valid signal. This is not defined by any LSB draft, # -# however, it is required to check the signals to determine if the # -# signals chosen are invalid arguments to the other functions. # -# # -# Inputs: accepts a single string value in the form or -{signal} or {signal} # -# # -# Return values: # -# 0 - Success (signal is valid # -# 1 - Signal is not valid # -################################################################################ +# The remaining fucntions are distro specific and are not defined by the LSB + +############################################################################### +# check_signal() # +# Usage: check_signal [ -{signal} | {signal} ] # +# # +# Purpose: Check for a valid signal. This is not defined by any LSB draft, # +# however, it is required to check the signals to determine if the # +# signals chosen are invalid arguments to the other functions. # +# # +# Inputs: accepts a single string value in the form or -{signal} or {signal} # +# # +# Return values: # +# 0 - Success (signal is valid # +# 1 - Signal is not valid # +############################################################################### check_signal() { local valsig @@ -548,22 +546,21 @@ check_signal() fi } - -################################################################################ -# check_sig_type() # -# Usage: check_signal [ -{signal} | {signal} ] # -# # -# Purpose: Check if signal is a program termination signal or a control signal # -# This is not defined by any LSB draft, however, it is required to # -# check the signals to determine if they are intended to end a # -# program or simply to control it. # -# # -# Inputs: accepts a single string value in the form or -{signal} or {signal} # -# # -# Return values: # -# 0 - Signal is used for program termination # -# 1 - Signal is used for program control # -################################################################################ +############################################################################### +# check_sig_type() # +# Usage: check_signal [ -{signal} | {signal} ] # +# # +# Purpose: Check if signal is a program termination signal or a control # +# signal. This is not defined by any LSB draft, however, it is # +# required to check the signals to determine if they are intended # +# to end a program or simply to control it. # +# # +# Inputs: accepts a single string value in the form or -{signal} or {signal} # +# # +# Return values: # +# 0 - Signal is used for program termination # +# 1 - Signal is used for program control # +############################################################################### check_sig_type() { local valsig @@ -580,4 +577,259 @@ check_sig_type() fi } +############################################################################### +# chkstat() # +# Usage: chckstat BIN_FILE {CONFIG_FILE} # +# # +# Purpose: 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. # +# # +# Inputs: accepts first argument of an executable file, and optionally a # +# second arugument of a configuration file. If BIN_FILE and # +# CONFIG_FILE are set in the calling environment, either or both # +# arguments may be omitted. # +# # +# Return values: # +# 0 - The executable, and optionally the configuration file exists # +# 2 - Invalid or excessive arguments # +# 5 - BIN_FILE does not exist # +# 6 - CONFIG_FILE (if set) does not exist # +############################################################################### +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() # +# Usage: loadproc {arguments} # +# # +# Purpose: loadproc is just a wrapper to start_daemon for simple scripts, # +# which will require no aruguments if $BIN_FILE is set. # +# # +# Inputs: Any optional arguments passed to loadproc will be passed on to the # +# executable defined by $BIN_FILE. # +# # +# Return values: (none) # +############################################################################### +loadproc() +{ + start_daemon "${BIN_FILE}" "${@}" +} + +############################################################################### +# endproc() # +# Usage: endproc {arguments} # +# # +# Purpose: endproc is just a wrapper to killproc for simple scripts, which # +# which will require no aruguments if $BIN_FILE is set. # +# # +# Inputs: Any optional arguments passed to endproc will be passed on to the # +# executable defined by $BIN_FILE. # +# # +# Return values: (none) # +############################################################################### +endproc() +{ + killproc "${BIN_FILE}" "${@}" +} + +############################################################################### +# statusproc() # +# Usage: statusproc $BIN_FILE $MESSAGE # +# # +# Purpose: stautsproc is just a wrapper to pidofproc for simple scripts, # +# which will require no aruguments if $BIN_FILE and MESSAGE are set. # +# # +# Inputs: accepts first argument of an executable file, and a second message # +# arugument "MESSAGE" to be displayed. If BIN_FILE and MESSAGE are # +# set in the calling environment, both arguments may be omitted. # +# # +# Return values: exit values of pidofproc # +############################################################################### +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}" -eq "0" ]; then + log_success_msg "Running with PID(s) ${pidlist}" + else + log_warning_msg "Not running!" + fi + + return "${STATUS}" +} + +############################################################################### +# reloadproc() # +# Usage: reloadproc {--force} $BIN_FILE $MESSAGE # +# # +# Purpose: 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. # +# # +# Inputs: 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 calling envirnoment 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. If the --force argument is # +# given, it follows the LSB definition of 'force-reload' - the # +# program is started if not already running. # +# # +# Return values: 1 - generic error # +############################################################################### +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() # +# Usage: evaluate_retval \ # +# [standard|start|stop|reload|force-reload|restart|try-restart] # +# # +# Purpose: determines the sucess or failure of a previous command based on # +# LSB exit values, and prints messages to the screen using the # +# log_*_msg() functions. # +# # +# Inputs: accepts one argument which determines the output of the message # +# displayed on the screen based on the LSB input values for init # +# scripts. The 'standard' argument makes no changes to the value of # +# $message or $MESSAGE, but only one can be set in the calling # +# environment. # +# # +# Return values: (none) # +############################################################################### +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}" -eq "0" ] + then + log_success_msg "${message}${MESSAGE} " + return "${error_value}" + else + log_failure_msg "${message}${MESSAGE} " + return "${error_value}" + fi +} + # End /lib/lsb/init-functions |