阿里云Linux自动切割Nginx日志并删除30天前的日志记录-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

阿里云Linux自动切割Nginx日志并删除30天前的日志记录

baker668 2016-01-21 19:28:09 8640
阿里云Linux自动切割Nginx日志并删除30天前的日志记录,出处http://bbs.it-home.org/(程序员论坛)



默认情况下,nginx将每天网站访问的日志都写在一个文件里面,随着时间的推移,这个文件势必越来越大会引起IO异常,最终成为问题。不过我们可以写个脚本自动切割Nginx日志并删除N天前的日志记录。
说明:
我的nginx日志路径: /alidata/log/nginx/access/
nginx安装目录: alidata/server/nginx
1.创建Nginx日志切割脚本:  vi /alidata/log/nginx/mvlogs.sh
#!/bin/bash

logspath="/alidata/log/nginx/access/"
mv ${logspath}/ithome/bbs.it-home.org.log ${logspath}/ithome/bbs_home_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /alidata/server/nginx/logs/nginx.pid`
find ${logspath}/ithome -mtime +30 -name "bbs_home_*" -exec rm -rf {} \;

上面的程序是一个bash脚本。logspath是我网站日志存放的绝对路径;yesterday是昨天的时间,格式是%Y%m%d;首先将当前nginx服务器正在写的日志移到带日期的文件中,然后kill -USR1接着写新的日志,最后查找30天以前的日志删除掉
这里需要注意的是,mv完日志之后,一定需要调用kill -USR1 `cat /alidata/server/nginx/logs/nginx.pid`,否则mv之后网站的日志将不会写入到新的${logspath}bbs.it-home.org.log文件中。
find: linux查找命令; -mtime: 标准语法; +30:  30天以前; -exec: 固定语法; rm -rf: 强制删除文件,包括目录; {} \: 固定语法 大括号+空格+\
2.给mvlogs.sh脚本添加执行权限
chmod +x /alidata/log/nginx/mvlogs.sh3.添加任务计划, crontab -e
-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
-i:在删除用户的crontab文件时给确认提示。
0 0 * * * /bin/sh /alidata/log/nginx/mvlogs.sh #表示每天凌晨执行
第一个参数定义的是:分钟,表示每个小时的第几分钟来执行。范围是从0-59第二个参数定义的是:小时,表示从第几个小时来执行,范围是从0-23第三个参数定义的是:日期,表示从每个月的第几天执行,范围从1-31第四个参数定义的是:月,表示每年的第几个月来执行,范围从1-12第五个参数定义的是:周,表示每周的第几天执行,范围从0-6,其中 0表示星期日。每六个参数定义的是:用户名,也就是执行程序要通过哪个用户来执行,这个一般可以省略;第七个参数定义的是:执行的命令和参数。
设置完成之后,这个脚本就会在每天的00:00进行切日志操作。
这样就会每天会在我们的日志目录下面生成类似bbs_home_20160121.log的日志文件
并且只保留最近30天的日志记录
应用服务中间件 Linux Shell 程序员 nginx
分享到
取消 提交回答
全部回答(3)
  • baker668
    2016-01-22 08:41:19
    回 2楼(西秦) 的帖子
    0 0
  • 西秦说云
    2016-01-21 21:23:01
    感谢分享!
    0 0
  • cloud@ymc
    2016-01-21 19:55:44
    Re阿里云Linux自动切割Nginx日志并删除30天前的日志记录
    谢谢分享!
    0 0
添加回答
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题