Nginx日志切割-按小时

Nginx日志切割-按小时

    • 序言
    • 原理
    • Shell脚本
    • 验证脚本
    • 定时配置

序言

最近调试接口,做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",可能是无法编译的,所以需要做如下几步操作

  1. cd到脚本存放路径 执行
vim logs.sh

如果vim命令无效先输入以下命令,如果可以编辑本条忽略

yum -y install vim-enhanced
  1. 输入以下两条命令,将编码格式转换为unix编码
:set fileformat=unix
:wq

验证脚本

先验证下脚本是否是可执行的,输入以下命令,检查下脚本是否是可执行的

sh logs.sh

定时配置

最后我们将该脚本配制为linux下的定时任务

  1. 创建定时任务
    crontab -e
    
  2. 输入i,进入编辑,配置为每小时五分执行
    5 * * * * sh /usr/local/nginx/logs/logs.sh
    
    :wq 进行保存,进行验证

你可能感兴趣的:(Nginx)