first commit
This commit is contained in:
184
常用脚本/shell/rc.all_mul
Executable file
184
常用脚本/shell/rc.all_mul
Executable file
@@ -0,0 +1,184 @@
|
||||
#!/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_cmd=
|
||||
local output=
|
||||
local output_watch=
|
||||
for i in ${!DAEMONS[@]}; do
|
||||
daemon="${DAEMONS[i]}"
|
||||
daemon_cmd="${daemon#$(dirname ${daemon%% *})/}"
|
||||
output=$(pgrep -f "$daemon_cmd$")
|
||||
output_watch=(pgrep -f "$(basename $WATCH_PROC) +start +[^ ]*\<$daemon_cmd$")
|
||||
[ -n "$output" -a "$output" != "$output_watch" ]
|
||||
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
|
||||
|
Reference in New Issue
Block a user