181 lines
4.3 KiB
Bash
Executable File
181 lines
4.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
function Quit {
|
|
[ -n "$1" ] && echo -e "\n\033[31;1mERROR: $1\033[0m!\n"
|
|
exit 3
|
|
}
|
|
|
|
function Spreadout {
|
|
local i=
|
|
local service=
|
|
local daemon=
|
|
echo "System ${ROOT_DIR##*/} processes ..."
|
|
for service in ${SERVICES[@]}; do
|
|
echo "Service: \"$service\""
|
|
done
|
|
for i in ${!DAEMONS[@]}; do
|
|
daemon="${DAEMONS[i]}"
|
|
echo "Daemon: \"$daemon\""
|
|
done
|
|
exit 0
|
|
}
|
|
|
|
function ShowState {
|
|
local name=$1
|
|
local err=$2
|
|
local total=$3
|
|
local style=$4
|
|
if [ '0' = "$total" ]; then
|
|
echo -e "$name \033[32${style}mnot found\033[0m ..."
|
|
return 254
|
|
elif [ '0' = "$err" ]; then
|
|
echo -e "$name \033[32${style}mrunning\033[0m ..."
|
|
return 0
|
|
elif [ -z "$total" -o "$total" = "$err" ]; then
|
|
echo -e "$name \033[33${style}mstopped\033[0m!"
|
|
return 1
|
|
else
|
|
echo -e "$name \033[31${style}merror\033[0m!!"
|
|
return 255
|
|
fi
|
|
}
|
|
|
|
function HandleServices {
|
|
local service=
|
|
for service in ${SERVICES[@]}; do
|
|
echo "===> ${1}ing \"$service\" ..."
|
|
systemctl $1 $service
|
|
sleep 0.4
|
|
done
|
|
}
|
|
|
|
function HandleDaemons {
|
|
local i=
|
|
local daemon=
|
|
for i in ${!DAEMONS[@]}; do
|
|
daemon="${DAEMONS[i]}"
|
|
echo "===> ${1}ing \"$daemon\" ..."
|
|
$WATCH_PROC $1 $daemon
|
|
sleep 0.4
|
|
done
|
|
}
|
|
|
|
function CheckServices {
|
|
local err=0
|
|
local service=
|
|
for service in ${SERVICES[@]}; do
|
|
systemctl status $service > /dev/null 2>/dev/null
|
|
ShowState "Service: \"$service\"" $? || let "err=1+$err"
|
|
done
|
|
ShowState Services $err ${#SERVICES[@]} ';1;3'
|
|
return $?
|
|
}
|
|
|
|
function CheckDaemons {
|
|
local err=0
|
|
local daemon=
|
|
local daemon_name=
|
|
for i in ${!DAEMONS[@]}; do
|
|
daemon="${DAEMONS[i]}"
|
|
daemon_name="$(basename ${daemon%% *})"
|
|
pgrep -x ${daemon_name:0:15} > /dev/null 2>/dev/null
|
|
ShowState "Daemon: \"$daemon\"" $? || let "err=1+$err"
|
|
done
|
|
ShowState Daemons $err ${#DAEMONS[@]} ';1;3'
|
|
return $?
|
|
}
|
|
|
|
function CheckSystem {
|
|
local i=
|
|
local err=0
|
|
local ret=0
|
|
local output=
|
|
local items=2
|
|
for i in CheckServices CheckDaemons; do
|
|
output=$($i)
|
|
ret=$?
|
|
if [ 254 -eq $ret ]; then
|
|
let "items=${items}-1"
|
|
elif [ 0 -lt $ret ]; then
|
|
let "err=1+$err"
|
|
fi
|
|
if [ -z "$1" ]; then
|
|
echo -e "$output" | tail -1
|
|
else
|
|
echo -e "$output"
|
|
fi
|
|
done
|
|
ShowState "System \"${ROOT_DIR##*/}\"" $err $items ';1'
|
|
exit $?
|
|
}
|
|
|
|
# start here
|
|
type pgrep > /dev/null || exit 1
|
|
cd $(dirname $0)
|
|
. processes || Quit 'File "processes" not found'
|
|
[ -x rc.pwatch ] || Quit 'Executalbe process not found'
|
|
WATCH_PROC="$(pwd)/rc.pwatch"
|
|
cd .. && ROOT_DIR=$(pwd) || Quit 'Change dir failed'
|
|
|
|
case $* in
|
|
'')
|
|
CheckSystem
|
|
;;
|
|
status)
|
|
CheckSystem detail
|
|
;;
|
|
start)
|
|
for check in CheckServices CheckDaemons; do
|
|
$check > /dev/null 2>/dev/null
|
|
check_ret=$?
|
|
[ 254 -eq $check_ret ] && continue
|
|
if [ 0 -ne $check_ret ]; then
|
|
Handle${check#Check} start
|
|
output=$($check)
|
|
if [ 0 -ne $? ]; then
|
|
echo -e "$output"
|
|
Quit "${check#Check} start failed"
|
|
fi
|
|
fi
|
|
done
|
|
CheckSystem
|
|
;;
|
|
stop)
|
|
for check in CheckDaemons CheckServices; do
|
|
$check > /dev/null 2>/dev/null
|
|
check_ret=$?
|
|
[ 254 -eq $check_ret ] && continue
|
|
[ 1 -ne $check_ret ] && Handle${check#Check} stop
|
|
done
|
|
CheckSystem
|
|
;;
|
|
startservice)
|
|
CheckServices > /dev/null 2>/dev/null
|
|
check_ret=$?
|
|
if [ 254 -eq $check_ret ]; then
|
|
CheckSystem
|
|
elif [ 0 -ne $check_ret ]; then
|
|
HandleServices start
|
|
CheckSystem
|
|
fi
|
|
;;
|
|
stopdaemon)
|
|
CheckDaemons > /dev/null 2>/dev/null
|
|
check_ret=$?
|
|
if [ 254 -eq $check_ret ]; then
|
|
CheckSystem
|
|
elif [ 1 -ne $check_ret ]; then
|
|
HandleDaemons stop
|
|
CheckSystem
|
|
fi
|
|
;;
|
|
list)
|
|
Spreadout
|
|
;;
|
|
*)
|
|
echo "Usage: $0 [status|start[service]|stop[daemon]|list]"
|
|
exit 3
|
|
;;
|
|
esac
|
|
|