服务自动拉起,定时日志清理,数据统计的shell脚本
2017-12-13 11:38
826 查看
1. 首先是自动拉起的脚本:monitorProcess.sh
我们需要自动拉起的服务是通过配置文件来进行配置的,我们制定了自己的配置文件格式,定时任务定时读取配置文件中配置的需要拉起的服务来执行拉起#!/bin/bash
. /etc/profile
WORK_DIR=`pwd` #获取当前目录
cd $WORK_DIR
[ ! -d log ] && mkdir log #log目录不存在则创建
exec 1>$WORK_DIR/log/m.log #定位脚本的输出
exec 2>$WORK_DIR/log/m.err
LOCK="MLOCK"
OLD_LOCK=`find -cmin +60 -name $LOCK` #查找60分钟之前被访问过的锁文件MLOCK
[ -n "$OLD_LOCK" ] && rm $OLD_LOCK #如果锁文件在60分钟之前被修改过(即近60分钟没有被改过),则删除锁文件
[ -f $LOCK ] && { echo "lock exits" ; exit 1;} #如果锁文件仍然存在,则说明锁文件在近60分钟内被修改过,说明进程正在被拉起,则退出
touch $WORK_DIR/$LOCK #锁不存在,则要执行拉起,并创建锁文件
#获取本机的IP
LOCAL_IP=`/sbin/ifconfig eth1 | /bin/awk '/inet / {printf ("%s;",$2)} END {print}' | /usr/bin/tr -d "addr:" | /bin/awk -F \; '{print $1}'`
ERR=0
while read -r line
do
echo $line | grep ^# 1>&2>/dev/null #过滤掉注释行
[ $? -eq 0 ] && continue #如果是注释行则继续
proc=`echo $line | awk -F"|" '{print $1}' ` #从一行数据中提取以|分割的每个字段
person=`echo $line | awk -F"|" '{print $2}' `
if_restart=`echo $line | awk -F"|" '{print $3}' `
restart_cmd=`echo $line | awk -F"|" '{print $4}' `
if [ -z "`ps -ef |grep -w "$proc" | grep -v grep`" ] ; then #判断进程是否存活
./sgSendMsg "$person" "$person" "${LOCAL_IP}_${proc}_down" #如果不存活,则发报警短信(公司的发短信脚本,可根据业务需求自行设计)
if [ $if_restart -eq 1 ] ; then #如果为1,则表示在服务挂掉的时候要拉起
eval $restart_cmd #执行拉起命令
echo "`date +'%Y-%m-%d %T'` ${proc} restarted" >>$WORK_DIR/log/restart.log #打印日志
fi
else
echo "`date +'%Y-%m-%d %T'` ${proc} ok" #打印日志
fi
done<$WORK_DIR/process.conf #逐行读取配置文件来拉起服务
rm -f $WORK_DIR/$LOCK #拉起完毕后删除锁
配置文件为:process.confrela_baike_tornado_server_1.py|zhoumi|1|cd /search/sdc/baike_inlink_server/server_rela_baike; ./start_1.sh
rela_baike_tornado_server_2.py|zhoumi|1|cd /search/sdc/baike_inlink_server/server_rela_baike; ./start_2.sh
ark_tornado_server_1.py|denglinjie|1|cd /search/sdc/baike_inlink_server/server_ark_baike; ./start_ark_server_1.sh
ark_tornado_server_2.py|denglinjie|1|cd /search/sdc/baike_inlink_server/server_ark_baike; ./start_ark_server_2.sh
每行是以'|' 来进行分割的,每个字段有不同的含义,这些字段在上面的脚本中依次读取,代表不同的含义:
含义如下:
服务名称 | 报警联系人 | 是否拉起 | 拉起需要执行的脚本
服务名称 :就是我们的脚本用ps命令来查看这个服务是否还存在,从而判断服务是否存活 报警联系人 :服务如果挂掉了,还要通知联系人 是否拉起 :服务挂掉了,我可以拉起,也可以不拉起。1-拉起,其他不拉起 拉起需要执行的脚本:服务挂掉了,如何拉起呢?按照这个命令来还行就可以自动拉起了
下面是crontab中关于该脚本的配置:
*/5 * * * * cd /search/sdc/monitor/auto_start; sh monitorProcess.sh 2> monitorProcess.err
每5分钟执行一次,错误日志重定向到monitorProcess.err文件中
2. 定时日志清理功能的crontab配置
5 * * * * find /search/sdc/baike_inlink_server/log/*.log -mtime +3 -delete这里配置的是:每个小时的第5分钟来查找并清理3天以前的日志
3. 数据统计功能
项目中,经常需要对日志数据做统计,我的脚本为:statisticProcess.sh#!/bin/bash successThreshold=1000000 slog='./log/statistic_para_match.log' #日志文件的路径 yestaday=`date -d '1 days ago' +%Y%m%d` #获取昨天的日期 #统计日志目录下昨天的日志文件中成功的条数(我的每行日志是以\t分割,倒数第二个字段为Succ表示成功) successCount=`cat /search/sdc/baike_inlink_server/log/para_match_tornado.*.${yestaday}_*.log | awk -F '\t' '{if(NF > 1 && $(NF-1) == "Succ") c += 1} END{print c}'` if [ $successCount -lt $successThreshold ] #如果成功的次数小于预期值,则发送报警短信 then ./sgSendMsg denglinjie denglinjie 'success count only '$successCount >> $slog fi echo $yestaday', success count: '$successCount >> $slog
脚本的crontab配置:
0 3 * * * cd /search/sdc/monitor/auto_start; sh statisticProcess.sh 2 > statisticProcess.err
每天的凌晨3点执行
相关文章推荐
- shell脚本每天自动统计网站访问日志
- shell脚本每天自动统计网站访问日志
- 清理oracle10g日志----shell脚本定时任务执行rman
- 日志定时压缩清理shell脚本(日志文件后缀格式如xxxxx.log.2017-07-10)
- linux利用shell脚本和cron实现定时备份、上传及垃圾日志清理(原创)
- shell脚本自动清理服务器日志和图片
- shell脚本自动清理服务器日志、图片等信息
- shell脚本自动清理服务器日志、图片等信息
- shell 定时获取5分钟内的日志数据-------通用脚本(框架)
- 使用shell脚本分析网站日志统计PV、404、500等数据
- linux利用shell脚本和cron实现定时备份、上传及垃圾日志清理(原创)
- CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动
- hadoop学习之HDFS(2.7):实例:开发shell脚本定时采集日志数据到hdfs
- 《设置定时自动清理归档日志脚本 》
- 使用shell脚本分析网站日志统计PV、404、500等数据
- Shell脚本定时采集日志数据到HDFS
- shell脚本实现的网站日志分析统计(可以统计9种数据)
- 安卓自动化测试:定时执行 shell 脚本,测试完成后自动重启