这篇文章主要讲解了“nginx 日志怎么定时切割”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“nginx 日志怎么定时切割”吧!
最近有个需求,需要查看我们官网的日活,我是打算通过查看 nginx 日志,对每条日志进行切割,过滤出 ip,然后通过 set 集合去重,查看集合 set 的长度就是当天的日活了。我的 nginx 是通过 yum 安装的,默认会对 nginx 日志进行切割,但是每天切割的时间不是当天的 00 点,这样得到的日活数据可能不太准确。我就打算自定义 nginx 日志的切割。
所谓的"切割",并不是真的把一个文件"切成两个",只是把原来的"access.log"文件重命名,比如重命名为今天的日期"2020-05-17.log",然后再创建一个名为"access.log"的新文件,以便新生成的日志仍然可以写入到名为"access.log"的新文件中,这样就能实现所谓的"日志滚动"或者"日志切割"的效果了。
但是,这样做会遇到一些问题,我们来手动操作一下,首先,重命名文件
mv access.log 2020-05-17.log
我们已经重命名了"access.log"文件,但是你会发现,重命名后,nginx日志仍然会写入到"2020-05-17.log"文件中,并不会自动创建一个新的"access.log"文件,即使你手动创建了一个新的"access.log"文件,nginx仍然会把日志写入到重命名后的"2020-05-17.log"文件中。
出现上述情况,是因为nginx进程读写日志文件时,是通过文件描述符去操作的,虽然我们修改了原"access.log"文件的文件名,但是原文件描述符与文件本身的对应关系仍然存在,所以,单单对文件重命名是不够的,我们需要让nginx重新打开一个新文件,以便将新的日志写入到新文件中。
通过yum源安装nginx后,默认会安装一个日志滚动的配置文件,这个配置文件就是 "/etc/logrotate.d/nginx" ,需要把这个文件删除。默认的日志路径是在 "/var/log/nginx/" ,我是在这个文件夹下写了一个 shell 脚本, nginx_log_split.sh
D=$(date +%Y-%m-%d) # 获取当天的日期# 移动文件mv -f /var/log/nginx/access.log /var/log/nginx/${D}.logsleep 0.5s# 重启nginx/usr/sbin/nginx -s reload
使用 crontab 执行定时任务,crontab -e 后编辑一行
00 00 * * * /var/log/nginx/nginx_log_split.sh
感谢各位的阅读,以上就是“nginx 日志怎么定时切割”的内容了,经过本文的学习后,相信大家对nginx 日志怎么定时切割这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。