网上有许多按照天切割日志的。但是由于应用需要,对该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 执行移动脚本.

到此我们的按分钟切割脚本和移动日志文件脚本完成!