前言
本博客内容仅为记录博主思路,仅供参考,一切以自己实践结果为准。
一、Nginx日志分割(解释版)
#!/bin/bash
# effect: 将成功连接的日志分割出来,按照日期排序存放,方便查阅管理
#####函数部分#####
logs_nginx_access { #定义日志分割函数
day=$(date -d "-1 day" "+%Y%m%d") #定义时间变量:获取前一天的日期
logs_path="/var/log/nginx" #定义路径变量:确定分割后的日志存放路径
pid_path="/usr/local/nginx/logs/nginx.pid" #获取pid号:获取nginx进程的pid号
[ -d $logs_path ] || mkdir -p $logs_path #通过-d判断存放日志目录是否存在,不存在则创建
mv /usr/local/nginx/logs/access.log ${logs_path}/han.com.access.$day
#通过mv移动日志文件并重命名,归纳管理
kill -USR1 $(cat $pid_path) #通过kill -USR1 pid号平滑重载Nginx服务,重新创建日志文件
find $logs_path -mtime +30 -exec rm -rf {} \; #通过find查找30天以上的日志,在经过-exec传参删除
path=`pwd`
name=`echo $0`
pathtest=`echo $0 |cut -d/ -f 1`
if [ "$pathtest" == "." ];then
name=`echo $0 |cut -d/ -f 2-`
fi
(crontab -l;echo "0 1 * * * $path/$name")| crontab
chmod +x $path/$name
}
#####脚本主题#####
logs_nginx_access #调用日志分割函数
二、Nginx日志分割(纯净版/进阶)
#!/bin/bash
# effect: 将成功连接的日志分割出来,按照日期排序存放,方便查阅管理
#####函数部分#####
logs_nginx_access() {
day=$(date -d "-1 day" "+%Y%m%d")
logs_path="/var/log/nginx"
pid_path="/usr/local/nginx/logs/nginx.pid"
[ -d $logs_path ] || mkdir -p $logs_path
mv /usr/local/nginx/logs/access.log ${logs_path}/han.com.access.$day
kill -USR1 $(cat $pid_path)
find $logs_path -mtime +30 -exec rm -rf {} \;
path=`pwd`
name=`echo $0`
pathtest=`echo $0 |cut -d/ -f 1`
if [ "$pathtest" == "." ];then
name=`echo $0 |cut -d/ -f 2-`
fi
(crontab -l;echo "0 1 * * * $path/$name")| crontab
chmod +x $path/$name
}
#####脚本主题#####
logs_nginx_access
三、结语
- 易错点:该脚本只提取了成功链接的日志,若需要更多日志,自行添加MV定义即可
- 事故点:crontab免交互记得先把之前的周期脚本列出来,不然会覆盖之前的周期性脚本
- 知识点:考虑了执行脚本的方法不同,$0的值不同,因此根据$0的值判断出路径,用cut去除相对路径的./字符