小小菜鸟脚本,菜鸟思维,见谅!!!
一、首先是日志切割
#! /bin/bush
#######################################################################################
#方法封装,切割日志
#author:谭家俊 date:2015-08-20 funtion:linux按天分割nginx访问日志,并且保3天内的。
########################################################################################
nginx_log="/usr/local/nginx/logs/access.log" #nginx访问日志目录
new_log_path="/usr/local/nginx/logs" #切割后的目录
today=`date +%Y-%m-%d` #今天的时间日期
function sortTheLog(){
rm -rf ${new_log_path}/${today} #删除一下今天的日志文件目录,避免之前手动有产生一样名字的文件名字
mkdir ${new_log_path}/${today} #创建记录今天的日志目录/usr/local/nginx/logs/2015-08-20(今天是2015-08-20的话)
echo ${new_log_path} #调试信息的输出
cp -rf ${nginx_log} ${new_log_path}/${today} #将今天的nginx访问日志access.log复制到新建的日志目录下
echo "" |cat > ${nginx_log} #清空nginx的日志文件access.log
#这里是写一个for循环玩玩而已,打印前3天的日期
for loop in 1 2 3
do
today_n=`date -d "${loop} days ago" +%Y-%m-%d`
echo ${today_n}
done
#for end
//因为是要保留3天的日志,所以这里删除前4天的日志
days_ago_4=`date -d "4 days ago" +%Y-%m-%d` #前4天的日期
del_path="${new_log_path}/${days_ago_4}" #删除的路径
#echo "$del_path"
# read ${new_log_path}/days_ago_4
if [ -d "$del_path" ] #路径如果存在,则删除
then
echo ""
rm -rf ${del_path}
else
echo ""
fi
}
sortTheLog 调用方法
二、日志检查
#! /bin/bush
##################
#方法封装
#排查方法 入口:#param1:错误代码前缀(int) #param:错误代码后缀(int) 返回:无
function check(){
flag=0 #while循环入口
end=$2 #输入参数2,循环结束
start=$1 #输入参数1,循环开始
while [ $flag -le $end ] #如果start>end,结束循环
do
s=$[$start+${flag}]
state="HTTP/1.1\" ${s}" #遍历服务器每种错误状态码,如500,501,502
#echo ${s}
#echo ${state}
#echo `grep "HTTP/1.1\" 404" ${new_log_path}/${today}/access.log | wc -l`
#echo `grep "${state}" ${new_log_path}/${today}/access.log | wc -l` #根据错误代码统计日志中错误行数
error_num=`grep "${state}" ${new_log_path}/${today}/access.log | wc -l` #匹配今天的日志有没这种状态码的记录行,有就统计错误数量记录
if [ $error_num -gt 0 ] #大于0,有错
then
echo "${state} error..."
#echo "服务器有错误啦!" | mail -s "发现服务器访问日志错误代码" 15986943045@163.com
mail -s "发现服务器访问日志错误代码" 15986943045@163.com < ${new_log_path}/${today}/access.log #邮件通知,把错误日志以邮件发送
fi
flag=$[$flag+1]
done
}
#调用排查方法,排查4xx(请求错误)
check 400 14
#调用排查方法,5xx(服务器错误)
check 500 5
将以上的内容保存成shell脚本,加入定时器即可每天按时自我分割和排查...也算是自己学习的小小例子吧!!!
注意:在做发送邮件的时候,邮箱尽量不要用qq邮箱,会被拦截收不到的。我用的是163邮箱,而且进行了白名单设置。所以接收邮件挺快。