Bash: shell脚本实现快速查看日志,这一刻心情真好
监控隔三差五写一小时,经历半个多月,终于完成了订单自动化
远程登录ssh
- 路由转发设置
- 旧电脑改造为centos
python自动化脚本
- 部署python3.6环境
- 部署项目
- 使用cron调度
- 重构代码适配cron运行方式
查看日志
-
编写shell脚本快捷命令
-
用过jlog命令可以快速查看运行日志
#! /bin/sh FunctionHelp(){ # jlog.sh 的使用说明 if [[ $1 =~ (help|^\?$) ]];then echo "============= 使用帮助 jlog help|? by at 170809 =================="; else echo "提示:FAIL 命令错误,参数超过3个";fi echo "" echo "命令:jlog.sh [l|n|o|h|log|nohup|order|heart] [now/0|last/-1|all|170808] [500]" echo "参数:目录 dir -- 可选,预设目录可使用简称或全称,其他目录必须全称,默认值log" echo "参数:日期 date -- 可选,now/0当天,last/-1最后,all总日志,默认all,如处理Nohup,date可用2位以上数字表达年份" echo "参数:行数 count -- 可选,默认200" echo "" echo "日志:总路径 /data/testapplog" echo "日志:总日志 /data/testapplog/log -- 记录级别 Fail(warn) Error(warn) Exception(error) Traceback(error)" echo "日志:分路径 /data/testapplog/Nohup -- run.py运行日志" echo "日志:分日志 /data/testapplog/Nohup/Nohup -- 记录级别 无正常日志,无Traceback" echo "日志:天日志 /data/testapplog/Nohup/Nohup/1708/Nohup170808 -- 记录级别 正常和错误日志,异常日志,但不记Traceback" echo "日志:分路径 /data/testapplog/Order -- 下单监控日志" echo "日志:分路径 /data/testapplog/Heart -- 接口监控日志" echo "" echo "示例:查看log的200行 --- jlog" echo "示例:查看heart的总200行 --- jlog h" echo "示例:查看order的当天200行 --- jlog o 0" echo "示例:查看Nohup的当年500行 --- jlog n 0 500" echo "" } FunctionTest(){ # 打印入参情况 echo "function: ${FUNCNAME[@]}" echo "paras: $#个($*)" echo "paraDir: $paraDir" echo "paraDateType: $paraDateType" echo "paraCountInt: $paraCountInt" } UtilDirparaToDirname(){ # 将参数转化为日志dir,入参dir if [ $1 == o ]||[ $1 == order ];then echo Order;return; elif [ $1 == h ]||[ $1 == heart ];then echo Heart;return; else echo $1;return;fi } UtilDirDateToLogfile(){ # 根据dir和date确定通用类的logFile,入参pathDir,date dirMon=`date +%Y%m` logDay=`date +%Y%m%d` pathDir=$3/$1 if [[ $2 =~ ^(all)$ ]];then echo ${pathDir}/$1;return; elif [[ $2 =~ ^(-1|last)$ ]];then echo `ls -t ${pathDir}/${dirMon}/$1* | head -1`;return; elif [[ $2 =~ ^(0|now)$ ]];then echo ${pathDir}/${dirMon}/$1${logDay};return; elif [[ $2 =~ ^0{,1}[0-9]+$ ]];then logDay=$2;echo ${pathDir}/${dirMon}/$1${dirMon}$2;return; else echo $3/$1/$1;return;fi } Tail(){ # 查看日志的基本方法,入参logFile,count echo "查看日志:$1 最新$2行" tail -$2f $1 } TailLog(){ # log日志处理,入参dir,date,count,pathRoot dir=log logFile=$4/${dir} Tail ${logFile} $3 # 执行查看日志 } TailNohup(){ # Nohup日志处理,入参dir,date,count,pathRoot dir=Nohup if [[ $2 =~ ^[0-9]{2,}$ ]];then # date为170808|17|1708,则取2017年的日志 dirYear=`date +%Y` paraDate=$2 fileName=${dir}${dirYear:0:2}${paraDate:0:2} logFile=$4/${dir}/${fileName} else # date为其它,则取当年日志 dirYear=`date +%Y` logFile=$4/${dir}/${dir}${dirYear} fi Tail ${logFile} $3 # 执行查看日志 } TailDir(){ # 通用dir目录类型的日志处理,入参dir,date,count,pathRoot dir=$(UtilDirparaToDirname $1) # 确定dir目录 logFile=$(UtilDirDateToLogfile ${dir} $2 $4) # 确定logFile Tail ${logFile} $3 # 执行查看日志 } ChooseTailFunction(){ # 日志方法决策,入参dir,date,count,pathRoot if [ $1 == l ]||[ $1 == log ];then TailLog $*; # log类日志 elif [ $1 == n ]||[ $1 == nohup ];then TailNohup $*; # Nohup类日志 else TailDir $*;fi # dir通用类日志 } # 默认参数值 paraDir=log paraDateType=all paraCountInt=200 pathRoot=/data/testapplog # 入参赋值 if [ $1 ];then paraDir=$1;fi if [ $2 ];then paraDateType=$2;fi if [ $3 ];then paraCountInt=$3;fi if [[ $1 =~ (help|^\?$) ]]||[ $# -gt 3 ];then FunctionHelp $1;exit 1;fi # 根据类型,判断执行不同的方法 ChooseTailFunction ${paraDir} ${paraDateType} ${paraCountInt} ${pathRoot} # 调试代码 #FunctionTest $* # 代码仓库 TailDir 里的dir过程旧代码 # declare -l $1 # 转成小写 # if [ $1 == o ]||[ $1 == order ];then dir=Order; # elif [ $1 == h ]||[ $1 == heart ];then dir=Heart; # else dir=$1;fi
远程登录后,jlog看到自动化在默默地跑,心情好!