Files
jiacrontab/deployment/jiacrontabctl
jiazhizhong 1279635d7f fix
2022-03-10 17:09:03 +08:00

262 lines
8.1 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# -----------------------------------------------------------------
# The initial version was released by Vipkwd
# -----------------------------------------------------------------
# 应用场景本脚本需配合jiacrontab v2.2.0+ 版本使用
# https://jiacrontab.iwannay.cn/download/jiacrontab-v2.2.0-linux-amd64.zip
#
# 部署方法1、解压上述zip二进制包; 2、将本脚本放入解压后的目录终呈如下结构
#
# [root@vipkwd jiacrontab]# pwd
# /data/wwwroot/jiacrontab
# [root@vipkwd jiacrontab]# ll
# 总用量 16
# 1033992 -rwx--x--x 1 root root 7.4K 8月 14 21:30 jiacrontabctl
# 1034047 drwxr-xr-x 3 root www 4.0K 8月 11 08:27 jiacrontab_admin
# 1033995 drwxr-xr-x 4 root www 4.0K 8月 11 14:24 jiacrontabd
# [root@vipkwd_com jiacrontab]#
# -----------------------------------------------------------------
# -----配置项 start-----
# 提供进程搜索关键字(即: "jiacrontab_admin"与“jiacrontabd” 在公共字符串部分用于shell grep 过滤)
APP_KEYWORDS=jiacrontab
# 提供web前端服务的脚本文件(目录)名(对应: ./jiacrontab_admin/jiacrontab_admin)
ADMIN_SCRIPT_NAME=jiacrontab_admin
# 任务调度服务脚本文件(目录)名(对应: ./jiacrontabd/jiacrontabd)
BD_SCRIPT_NAME=jiacrontabd
#手动指定项目PATH(默认空,自动定位 pwd 指令目录)
DEPLOY_PATH=
# -----配置项 end-----
FORMATER_LINE="------------------------------------------------------------------------------------------------------"
ECHO_PREFIX=" -- "
STIME_LOGFILE=".stime.log"
# 绝对定位工作目录
PROJECT_ROOT=${DEPLOY_PATH:=`pwd`}
if [ ! -d $PROJECT_ROOT ];then
echo -e "[\033[31mError\033[0m] DEPLOY_PATH \033[33m${DEPLOY_PATH}\033[0m is not a directory!"
exit 1
fi
ai=0
apps=("${ADMIN_SCRIPT_NAME}" "${BD_SCRIPT_NAME}")
for app in ${apps[*]}
do
path=${PROJECT_ROOT}/${app}
if [ ! -d $path ];then
echo -e "[\033[31mError\033[0m] Project path: \033[33m${path}\033[0m is not a directory!"
ai=$(($ai+1))
fi
done
apps=""
[[ $ai -gt 0 ]] && exit 1
ADMIN_CLI_IS_RUNNING=0
BD_CLI_IS_RUNNING=0
function _timeNow(){
nowtime=`date "+%Y-%m-%d %H:%M:%S"`
}
function _runApp(){
if [ "${1}" == "0" ];then
path=${PROJECT_ROOT}/${2}
if [ ! -d $path ];then
echo -e "[\033[31mError\033[0m] \033[33m${path}\033[0m is not directorySkiped!"
return 0
fi
if [ ! -f "${path}/${2}" ];then
echo -e "[\033[31mError\033[0m] Service script \033[33m${path}/${2}\033[0m is not existSkiped!"
return 0
fi
cd $path
`nohup ./${2} &> ${2}.log &`
#sleep 1;
_timeNow
echo "${2}[ StartTime: ${nowtime} ]" >> ${PROJECT_ROOT}/${STIME_LOGFILE}
echo -e " ${ECHO_PREFIX} \033[33m${2}\033[0m (\033[32mStarted\033[0m)"
else
echo -e " ${ECHO_PREFIX} \033[33m${2:=Unknow}\033[0m is running (\033[33mSkiped\033[0m)"
fi
}
function _cliListen(){
for cli in `ps -ef | grep "$APP_KEYWORDS" | grep -v "grep" | awk -F ' ./' '{print $2}'`
do
if [ "${cli}" == "${ADMIN_SCRIPT_NAME}" ];then
ADMIN_CLI_IS_RUNNING=1
fi
if [ "${cli}" == "${BD_SCRIPT_NAME}" ];then
BD_CLI_IS_RUNNING=1
fi
done
}
function _parseDuringTime(){
#parseTimeResultStr=""
logfile="${PROJECT_ROOT}/${STIME_LOGFILE}"
if [ -f $logfile ];then
stime=`grep "${1}\[ StartTime:" ${logfile} | tail -1 | awk '{print $3 " "$4}'`
_timeNow
time1=$(($(date +%s -d "$nowtime") - $(date +%s -d "$stime")));
array=("Duration: ")
config=(31579200 "Year" 2635200 "Month" 86400 "Day" 3600 "Hour" 60 "Minute" 1 "Second")
j=0
for str in ${config[*]}; do
if [ $(($j%2)) -eq 0 ];then
if [ ${time1} -ge ${config[$j]} ];then
j1=$(($j+1))
j2=$(($j+2))
array[$j1]=$[ $time1 / ${config[$j]} ]
array[$j2]=${config[$j1]}
if [ ${array[$j1]} -gt 1 ];then
array[$j2]="${array[$j2]}s"
fi
time1=$(($time1 % ${config[$j]}))
fi
fi
j=$(($j+1))
done
if [ "Null" == "${stime}Null" ];then
return 0
fi
parseTimeResultStr="${stime} (${array[*]})"
return 1
fi
parseTimeResultStr=""
return 0
}
function start(){
_cliListen
if [ $ADMIN_CLI_IS_RUNNING -eq 0 -a $BD_CLI_IS_RUNNING -eq 0 ];then
echo "" > ${PROJECT_ROOT}/${STIME_LOGFILE}
fi
_runApp "${ADMIN_CLI_IS_RUNNING}" "${ADMIN_SCRIPT_NAME}"
_runApp "${BD_CLI_IS_RUNNING}" "${BD_SCRIPT_NAME}"
}
function stop(){
for line in `ps -ef | grep "$APP_KEYWORDS" | grep -v grep | awk -F ' ' '{print $2 " " $NF}'`
do
STR=`echo $line | awk '{print $1}'`
if [ $STR -gt 0 ] 2> /dev/null ;then
kill -9 $STR;
else
echo -e " ${ECHO_PREFIX} \033[33m${STR}\033[0m (\033[34mStoped\033[0m) "
#sleep 1;
fi
done
echo "" > ${PROJECT_ROOT}/${STIME_LOGFILE}
}
function status(){
_cliListen
echo $FORMATER_LINE
echo " ${ECHO_PREFIX}"
if [ $ADMIN_CLI_IS_RUNNING -eq 0 ];then
echo -e " ${ECHO_PREFIX} Active: \033[31minactive (dead)\033[0m \033[33m${ADMIN_SCRIPT_NAME}\033[0m since Unknow"
else
_parseDuringTime "${ADMIN_SCRIPT_NAME}"
if [ $? -gt 0 ] 2> /dev/null;then
# 全局获取函数返回的字符串
echo -e " ${ECHO_PREFIX} Active: \033[32mactive (running)\033[0m \033[33m${ADMIN_SCRIPT_NAME}\033[0m since ${parseTimeResultStr}"
#sleep 1
else
echo -e " ${ECHO_PREFIX} Active: \033[32mactive (running)\033[0m \033[33m${ADMIN_SCRIPT_NAME}\033[0m since Unknow"
fi
fi
if [ $BD_CLI_IS_RUNNING -eq 0 ];then
echo -e " ${ECHO_PREFIX} Active: \033[31minactive (dead)\033[0m \033[33m${BD_SCRIPT_NAME}\033[0m since Unknow"
else
_parseDuringTime "${BD_SCRIPT_NAME}"
if [ $? -gt 0 ] 2> /dev/null;then
# 全局获取函数返回的字符串
echo -e " ${ECHO_PREFIX} Active: \033[32mactive (running)\033[0m \033[33m${BD_SCRIPT_NAME}\033[0m since ${parseTimeResultStr}"
#sleep 1
else
echo -e " ${ECHO_PREFIX} Active: \033[32mactive (running)\033[0m \033[33m${BD_SCRIPT_NAME}\033[0m since Unknow"
fi
fi
echo " ${ECHO_PREFIX}"
echo $FORMATER_LINE
if [ $ADMIN_CLI_IS_RUNNING -gt 0 -o $BD_CLI_IS_RUNNING -gt 0 ];then
ps -ef | grep "$APP_KEYWORDS" | grep -v grep
sleep 1
echo $FORMATER_LINE
netstat -tlpan | grep "$APP_KEYWORDS" | grep -v grep
fi
}
function cli(){
echo "input: $0 OPTION" >&2
echo " OPTION :"
echo " start"
echo " stop"
echo " status"
echo " restart"
echo " h | help"
}
function helpDoc() {
echo $FORMATER_LINE
#echo " "
echo " Jiacrontab 简单可信赖的任务管理工具(V2.2.0)"
echo " 1.自定义job执行"
echo " 2.允许设置job的最大并发数"
echo " 3.每个脚本都可在web界面下灵活配置如测试脚本运行查看日志强杀进程停止定时..."
echo " 4.允许添加脚本依赖(支持跨服务器),依赖脚本提供同步和异步的执行模式"
echo " 5.支持异常通知"
echo " 6.支持守护脚本进程"
echo " 7.支持节点分组"
echo " n.更多请访问仓库查看"
#echo " "
echo $FORMATER_LINE
#echo " "
echo " Github: https://github.com/iwannay/jiacrontab"
echo " Csdn: https://codechina.csdn.net/mirrors/iwannay/jiacrontab"
echo " "
echo " Package: https://jiacrontab.iwannay.cn/download/"
#echo " "
echo $FORMATER_LINE
cli
}
COMMAND=$1
shift 1
case $COMMAND in
start)
start;
;;
stop)
stop;
;;
status)
status;
;;
restart)
stop;
sleep 1
start;
sleep 1
status;
;;
h|help)
helpDoc;
;;
*)
cli;
exit 1;
;;
esac