http://www.cnblogs.com/wangtao_20/p/3325327.html
日志记录了日常访问web的信息,但随着时间,日志文件会越来越大,下载也很慢,用记事本打开慢,甚至有时候崩溃。使用第三方免费的日志分析工具-日志宝,可以上传nginx、apache、iis的日志文件,它们帮助分析网站安全方面。毕竟专攻,更加专业。日志宝对上传的文件也是做了大小限制的,不超过50m。
日志文件对管理员是很重要的,又不能不要,因此,想办法让日志文件以月为文件夹,并每一天都生成一个日志文件,这样保存起来。
好,那我来看看如何操作:
1、制作分割日志文件的sh
2、定时任务 crontab
第一步:
#!/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`
可以下载这个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
保存退出。
不需要重新启动,即时开始备份。
这就是备份的效果