作为程序员一定要保持良好的睡眠,才能好编程

nginx自动切割日志

发布时间:2016-05-15

http://www.cnblogs.com/wangtao_20/p/3325327.html


日志记录了日常访问web的信息,但随着时间,日志文件会越来越大,下载也很慢,用记事本打开慢,甚至有时候崩溃。使用第三方免费的日志分析工具-日志宝,可以上传nginx、apache、iis的日志文件,它们帮助分析网站安全方面。毕竟专攻,更加专业。日志宝对上传的文件也是做了大小限制的,不超过50m。

日志文件对管理员是很重要的,又不能不要,因此,想办法让日志文件以月为文件夹,并每一天都生成一个日志文件,这样保存起来。


好,那我来看看如何操作:

1、制作分割日志文件的sh

2、定时任务  crontab


第一步:


r6.png


#!/bin/bash
#保存日志的路径
new_log_path="/data/nginx_logs"
#现在日志的名称
log_name="access.log"
log_path="/usr/local/nginx/logs"
pid_path="$log_path/nginx.pid"

#echo $log_path$log_name

#以每一个月为单位分组,记录每一天的日志
month_path=$new_log_path/$(date +%Y%m)
#判断month_path这个目录是否存在,如果不存在直接创建一个。
if [ ! -d $month_path ];then
        mkdir -p $month_path
fi

#这是每一天备份一次
today_log="$month_path/$(date -d yesterday +%Y%m%d)_access.log"

#

today_log="$month_path/$(date -d yesterday +%Y%m%d%H%M)_access.log"

#移动
mv "$log_path/$log_name" $today_log

#把日志文件转移走了,这里还要新建个access.log文件
touch "$log_path/$log_name"

#在没有执行kill -USR1 `cat ${pid_path}`之前,即便已经对文件执行了mv命令而改变了文件名称,
#nginx还是会向新命名的文件” /data/nginx_logs/*****_access.log”照常写入日志数据的。
#原因在于:linux系统中,内核是根据文件描述符来找文件的。
#这里需要注意 ``必须要用这样的字符包含起来,不能用双引号、不能用单引号,更不能什么都不用
kill -USR1 `cat $pid_path`

nginx_log.txt


可以下载这个shell文件,把后缀改成.sh

然后执行

chmod u+x nginx_log.sh


就可以执行这个sh文件了。


第二步:定时执行脚本,定时备份

crontab是linux下面一个定时任务进程。开机此进程会启动,它每隔一定时间会去自己的列表中看是否有需要执行的任务。


crontab  -e

* 04 * * 1 /data/wwwlogs/nginx_log_division.sh

会打开一个文件,加入上面的代码

格式为 "分 时 日 月 星期几  要执行的shell文件路径"。用*可以理解成“每”,每分钟,每个小时,每个月等等。

我设置是在周一凌晨4点运行nginx_log_division.sh脚本,脚本的内容就是重新生成一个新的日志文件。



"分 时 日 月 星期几  要执行的shell文件路径"


每月每天每周每日没分 执行一次/a/nginx_log.sh

r9.png

保存退出。

不需要重新启动,即时开始备份。



这就是备份的效果

r7.png


r8.png