#!/bin/bash # Begin $rc_base/init.d/functions - Run Level Control Functions # Based on functions script from LFS-3.1 and earlier. # Rewritten by Gerard Beekmans - gerard@linuxfromscratch.org # With code based on Matthias Benkmann's simpleinit-msb @ # http://winterdrache.de/linux/newboot/index.html umask 022 export PATH="/bin:/usr/bin:/sbin:/usr/sbin" KILLDELAY=3 COLUMNS=$(stty size) COLUMNS=${COLUMNS##* } COL=$[ $COLUMNS - 10 ] WCOL=$[ $COLUMNS - 30 ] WWCOL=$[ $COLUMNS - 40 ] SET_COL="echo -en \\033[${COL}G" SET_WCOL="echo -en \\033[${WCOL}G" SET_WWCOL="echo -en \\033[${WWCOL}G" CURS_UP="echo -en \\033[A" NORMAL="echo -en \\033[0;39m" SUCCESS="echo -en \\033[1;32m" WARNING="echo -en \\033[1;33m" FAILURE="echo -en \\033[1;31m" COLRED="\033[1;6m\033[31m" COLGREEN="\033[1;6m\033[32m" COLYELLOW="\033[1;6m\033[33m" COLBLUE="\033[1;6m\033[34m" COLMAGENTA="\033[1;6m\033[35m" COLWHITE="\033[1;6m\033[37m" COLDEFAULT="\033[0m" COLOREDSTAR="${COLBLUE}(${COLGREEN}*${COLBLUE})${COLDEFAULT} " print_error_msg() { return 0 echo $FAILURE echo -e " An Error occurred." echo -e " Script: ${COLWHITE}$i${COLRED}" echo -e " Exitcode: ${COLWHITE}$error_value${COLRED}" echo $NORMAL echo echo "Press Enter to continue..." read } check_script_status() { if [ ! -f $i ] then echo "$i is not a valid symlink" continue fi if [ ! -x $i ] then echo "$i is not executable, skipping" continue fi } evaluate_retval() { error_value=$? if [ $error_value = 0 ] then print_status success else print_status failure fi return $error_value } print_status() { if [ $# = 0 ] then echo "Usage: $0 {success|warning|failure}" return 1 fi $CURS_UP case "$1" in success) $SET_COL echo -e -n $COLBLUE"[ " $SUCCESS echo -e -n "OK" echo -e $COLBLUE" ]" $NORMAL ;; warning) case "$2" in running) $SET_WCOL echo "Already running" $CURS_UP ;; not_running) $SET_WCOL echo "Not running" $CURS_UP ;; esac $SET_COL echo -e -n $COLBLUE"[ " $WARNING echo -e -n "ATTN" echo -e $COLBLUE" ]" $NORMAL ;; failure) $SET_COL echo -e -n $COLBLUE"[" $FAILURE echo -e -n "FAILED" echo -e $COLBLUE"]" $NORMAL ;; esac } getpids() { base=${1##*/} pidlist=$(pidof -o $$ -o $PPID -x $base) } loadproc() { if [ $# = 0 ] then echo "Usage: loadproc {program}" exit 1 fi getpids $1 if [ -z "$pidlist" ] then "$@" evaluate_retval else $SET_WCOL print_status warning running fi } killproc() { if [ $# = 0 ] then echo "Usage: killproc {program} [signal]" exit 1 fi if [ -z "$2" ]; then signal=TERM fallback=KILL else signal=${2##-} signal=${signal##SIG} fallback="" fi getpids $1 if [ -n "$pidlist" ]; then failure=0 for pid in $pidlist do kill -$signal $pid 2>/dev/null for ((i=0; $i<5000; i=$i+1)); do :; done for ((i=0; $i<$KILLDELAY; i=$i+1)); do kill -0 $pid 2>/dev/null || break sleep 1 done if [ -n "$fallback" ]; then kill -$fallback $pid 2>/dev/null; fi kill -0 $pid 2>/dev/null && failure=1 done base=${1##*/} if [ $failure = 0 ]; then rm -f /var/run/$base.pid; fi (exit $failure) evaluate_retval else $SET_WCOL print_status warning not_running fi } reloadproc() { if [ $# = 0 ] then echo "Usage: reloadproc {program} [signal]" exit 1 fi if [ -z "$2" ]; then signal=HUP else signal=${2##-} signal=${signal##SIG} fi getpids $1 if [ -n "$pidlist" ] then failure=0 for pid in $pidlist do kill -$signal $pid || failure=1 done (exit $failure) evaluate_retval else $SET_WCOL print_status warning not_running fi } statusproc() { if [ $# = 0 ] then echo "Usage: statusproc {program}" exit 1 fi base=${1##*/} getpids $base if [ -n "$pidlist" ] then echo "$base is running with Process ID(s) $pidlist" else if [ -s /var/run/$base.pid ] then echo "$1 is not running but /var/run/$base.pid exists" return 1 else echo "$1 is not running" fi fi } progressbar() { if [ $# != 1 ] then echo "Usage: progressbar {progress}" exit 1 fi if [ -f /proc/splash ] then echo "show $(( 65534 * $1 / 100 ))" > /proc/splash fi } # End $rc_base/init.d/functions