简述nginx日志管理切割日志(亲测可行)

举报
lxw1844912514 发表于 2022/03/27 23:22:03 2022/03/27
【摘要】  日志切割 nginx的日志文件没有rotate功能 编写每天生成一个日志,我们可以写一个nginx日志切割脚本来自动切割日志文件 第一步就是重命名日志文件 (不用担心重命名后nginx找不到日志文件而丢失日志。在你未 重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,Linux是靠文件描述 符而不是文件...

 日志切割

nginx的日志文件没有rotate功能 编写每天生成一个日志,我们可以写一个nginx日志切割脚本来自动切割日志文件

第一步就是重命名日志文件 (不用担心重命名后nginx找不到日志文件而丢失日志。在你未 重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,Linux是靠文件描述 符而不是文件名定位文件 )

第二步向nginx主进程发送USR1信号

 nginx主进程接到信号后会从配置文件中读取日志文件名称
重新打开日志文件 (以配置文件中的日志名称命名) ,并以工作进程的用户作为日志文件 的所有者 重新打开日志文件后,nginx主进程会关闭重名的日志文件并通知工作进程使用新打开 的日志文件
工作进程立刻打开新的日志文件并关闭重名名的日志文件 然后你就可以处理旧的日志文件了。[或者重启nginx服务]

nginx日志按每分钟自动切割脚本如下 :

新建shell脚本:

vi   /opt/nginx/nginx_log.sh
 

  
  1. #!/bin/bash
  2. #设置日志文件存放目录
  3. #LOG_HOME="/home/wwwlogs/"
  4. LOG_HOME="/usr/local/nginx/logs"
  5. #备分文件名称
  6. LOG_PATH_BAK="$(date -d yesterday +%Y%m%d%H%M)".access.log
  7. #重命名日志文件
  8. mv ${LOG_HOME}/access.log ${LOG_HOME}/${LOG_PATH_BAK}
  9. #向nginx主进程发信号重新打开日志
  10. kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

创建crontab设置作业

设置日志文件存放目录crontab -e

*/1 * * * *  sh /opt/nginx/nginx_log.sh
 

 

自动删除7天前的指定日志文件


  
  1. # touch auto-del-7-day-ago-log.sh
  2. # chmod +x auto-del-7-day-ago-log.sh
  3. # vim auto-del-7-day-ago-log.sh
  4.   find /www/cookie.com/log.cookie.com/ -mtime +7 -name "push*.log" -exec rm -rf {} \;
  5.  
  6. # crontab -e
  7.  10 0 * * * /opt/sh/auto-del-7-day-ago-log.sh > /dev/null 2>&1

find /www/cookie.com/log.cookie.com/ -mtime +7 -name "push*.log" -exec rm -rf {} \;

#/www/cookie.com/log.cookie.com/目录下

#-mtime +7 7天前的文件

#-name "push*.log" 文件名称匹配push*.log

# -exec rm -rf 强制删除,包含目录


  
  1.  10 0 * * * /opt/sh/auto-del-7-day-ago-log.sh > /dev/null 2>&1
  2. #每天凌晨0点10分执行

参考:https://blog.csdn.net/Cookie_1030/article/details/81737336

超过90天的日志文件 删除

00 03 * * * find /home/connect/nginx/logs/ -type f -mtime +90 -delete
 

  
  1. #切割日志
  2. if ($time_iso8601 ~ '(\d{4}-\d{2}-\d{2})') {
  3. set $tttt $1;
  4. }
  5. access_log /home/wwwlogs/access-$tttt.log ;

=========下面 记录我出现的问题:==========

在介绍问题之前,介绍一个命名,时刻查看当前正在执行的定时任务

tail -f /var/log/cron
 

问题1.反引号问题,导致 kill 关闭掉进程时出错

错误写法

kill -USR1 cat `/usr/local/nginx/logs/nginx.pid`
 

正确写法

kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
 

问题2:权限问题

大家都知道,普通用户在重启nginx服务的时候,需要使用root超级用户权限

sudo service nginx restart
 

所以定时任务,需要切换到root用户使用root权限去执行定时任务


  
  1. [root@vagrant-centos7 logs]# crontab -l
  2. * * */1 * * sh /usr/local/nginx/logs/nginx_log.sh #一天生成一个日志文件

添加定时任务后需要重启crond 服务


  
  1. [root@vagrant-centos7 logs]# service crond restart
  2. Redirecting to /bin/systemctl restart crond.service
每分钟产生日志文件

文章来源: blog.csdn.net,作者:lxw1844912514,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/lxw1844912514/article/details/104738967

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。