服务自动拉起,定时日志清理,数据统计的shell脚本
来源:互联网 发布:编写c语言用什么软件 编辑:程序博客网 时间:2024/05/19 18:48
1. 首先是自动拉起的脚本:monitorProcess.sh
我们需要自动拉起的服务是通过配置文件来进行配置的,我们制定了自己的配置文件格式,定时任务定时读取配置文件中配置的需要拉起的服务来执行拉起
#!/bin/bash. /etc/profileWORK_DIR=`pwd` #获取当前目录cd $WORK_DIR[ ! -d log ] && mkdir log #log目录不存在则创建exec 1>$WORK_DIR/log/m.log #定位脚本的输出exec 2>$WORK_DIR/log/m.errLOCK="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 #锁不存在,则要执行拉起,并创建锁文件#获取本机的IPLOCAL_IP=`/sbin/ifconfig eth1 | /bin/awk '/inet / {printf ("%s;",$2)} END {print}' | /usr/bin/tr -d "addr:" | /bin/awk -F \; '{print $1}'`ERR=0while read -r linedo 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.conf
rela_baike_tornado_server_1.py|zhoumi|1|cd /search/sdc/baike_inlink_server/server_rela_baike; ./start_1.shrela_baike_tornado_server_2.py|zhoumi|1|cd /search/sdc/baike_inlink_server/server_rela_baike; ./start_2.shark_tornado_server_1.py|denglinjie|1|cd /search/sdc/baike_inlink_server/server_ark_baike; ./start_ark_server_1.shark_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/bashsuccessThreshold=1000000slog='./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 >> $slogfiecho $yestaday', success count: '$successCount >> $slog
脚本的crontab配置:
0 3 * * * cd /search/sdc/monitor/auto_start; sh statisticProcess.sh 2 > statisticProcess.err
阅读全文
0 0
- 服务自动拉起,定时日志清理,数据统计的shell脚本
- Shell脚本实现进程的自动拉起
- Shell之定时拉起脚本
- linux shell脚本定时清理tomcat日志文件(初稿)
- 清理oracle10g日志----shell脚本定时任务执行rman
- linux 日志定时清理脚本
- 数据库的自动作业清理日志脚本
- shell脚本自动清理服务器日志、图片等信息
- shell脚本自动清理服务器日志和图片
- 一个可自动备份及清理系统日志的Shell脚本
- 一个可自动备份及清理系统日志的Shell脚本
- shell 代码 进程监控脚本,拉起core dump的服务器进程,以维持服务稳定
- linux自动清理日志脚本
- 常用的shell日志统计脚本
- linux利用shell脚本和cron实现定时备份、上传及垃圾日志清理(原创)
- Shell脚本定时采集日志数据到HDFS
- MySQL数据的binlog处理方法 日志定时清理
- shell 定时获取5分钟内的日志数据-------通用脚本(框架)
- PANDAS 数据合并与重塑(concat篇) 原创 2016年09月13日 19:26:30 47784 pandas作者Wes McKinney 在【PYTHON FOR DATA ANALYS
- Python 将成高考科目,并列入全国计算机等级考试
- 8.1 分析并写出下面程序的运行结果
- getElementsByClassName和getElementById的区别
- 互联网
- 服务自动拉起,定时日志清理,数据统计的shell脚本
- 内部类
- mongo插入long类型数据
- jquery绑定click等事件无效解决方法live替代$().click不执行
- 17.12.12
- [Python]学习笔记(一)安装与使用
- 仿“今日头条”导航菜单左右滑动
- 线性代数第二章
- 类名.class.getName()的作用