雷锋 发表于 2018-11-15 06:38:01

nginx按分钟切割日志

  网上有许多按照天切割日志的。但是由于应用需要,对该web服务器进行更详细的分析!所以要按照分钟切割。研发部门的要求是他们有一个工具是扫描日志的工具,扫描完成后的日志会有.complete的后缀,扫描完的日志全部移到history_logs中。采用的是两个脚本来完成的此需求!
  1.切割日志的脚本如下:
  vim nginx_log.sh
#!/bin/bash  
#将nginx的日志按照分钟切割
  

  
#定义日志文件的路径
  
logs_path=/opt/nginx/logs/
  

  
#定义nginx的进程号的路径
  
pid_path=/opt/nginx/logs/nginx.pid
  

  
#取当前时间的day
  
dd=`date +%F`
  

  
#当前时间的小时
  
HH=`date +%H`
  

  
#当前时间的分钟
  
mm=`date +%M`
  
#将日志文件按照分钟切割的关键命令
  
mv ${logs_path}access.log ${logs_path}access-$dd-$HH-$mm.log
  

  
#将当前分钟的进程号杀死的同时,启动下一分钟nginx的进程
  
kill -USR1 `cat ${pid_path}`
  需要将该文件放在/opt/nginx/sbin 目录下,这样方便直接直接执行。
  因为是按照每分钟切割日志,所以我们使用crontab命令
  #crontab -e
  #该语句就是每分钟执行一次该脚本
  */1 * * * * /opt/nginx/sbin/nginx_log.sh
  我们可以观察在logs目录下会产生大量的日志,是类似access-2015-09-08-10-39.log 的文件。他们要求是有工具扫描这大量的日志,最后都是以.complete的文件我们需要移动到与logs同级的目录history_logs中的对应日期中去。
  2.移动脚本如下:
  vim move_logs.sh
#!/bin/bash  

  
#定义日志文件目录
  
logpath=/opt/nginx/logs/
  

  
#前一天的时间
  
lastdd=` date -d "yesterday" +%Y-%m-%d `
  

  
#进入到该目录中
  
cd /opt/nginx/history_logs
  

  
#创建前一天的日志目录
  
mkdir $lastdd
  

  
#开始将扫描过得前一天的日志移动到指定目录中
  

  
mv ${logpath}access-$lastdd-*.complete$lastdd/
  该脚本需要每天的凌晨执行,时间没必要那么精确。不耽误当天扫描当天的日志即可!
  同样我们需要将该脚本放在/opt/nginx/sbin目录下
  #crontab -e
  30 00 * * * /opt/nginx/sbin/move_logs.sh
  我所定的时间为凌晨12:30 执行移动脚本.
  到此我们的按分钟切割脚本和移动日志文件脚本完成!


页: [1]
查看完整版本: nginx按分钟切割日志