序言
最近调试接口,做ip授权,涉及到了查看nginx日志,但是由于每日数据量太大,导致从现场导出日志过于费劲,时间过于漫长,所以想到了给日志做时间切割!
原理
其实原理简简单单,就是定时执行一下让shell脚本 脚本让原来access.log按照时间格式重新命名一下,并保存下来。
Shell脚本
#!/bin/bash
# Every hour running time.
# by bobliu.
# The Nginx logs path
log_year=$(date +"%Y")
log_month=$(date +"%m")
log_day=$(date +"%d")
log_hour=$(date +"%H")
log_min=$(date +"%M")
logs_path="/usr/local/nginx/logs/"
save_path="/usr/local/nginx/logs/log"
if [ ! -d "$save_path" ]; then
mkdir -p "$save_path"
fi
mv ${logs_path}access.log ${save_path}access_${log_year}${log_month}${log_day}_${log_hour}_${log_min}.log
if [ $log_hour = 00 ]; then
mv ${logs_path}error.log ${save_path}error_$log_year$log_month$log_day.log
fi
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
以上内容保存在一个sh文件,文件名为:logs.sh
注意一下:如果sh文件是在windows开发编写的,当你上传到linux环境上时候,出现"syntax error: unexpected end of file",可能是无法编译的,所以需要做如下几步操作
- cd到脚本存放路径 执行
vim logs.sh
如果vim命令无效先输入以下命令,如果可以编辑本条忽略
yum -y install vim-enhanced
- 输入以下两条命令,将编码格式转换为unix编码
:set fileformat=unix
:wq
验证脚本
先验证下脚本是否是可执行的,输入以下命令,检查下脚本是否是可执行的
sh logs.sh
定时配置
最后我们将该脚本配制为linux下的定时任务
- 创建定时任务
crontab -e
- 输入i,进入编辑,配置为每小时五分执行
:wq 进行保存,进行验证5 * * * * sh /usr/local/nginx/logs/logs.sh