| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 | # 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}
 |