Nginx日志轮转及Logrotate自定义日志轮转

2023-10-13 16:59

本文主要是介绍Nginx日志轮转及Logrotate自定义日志轮转,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

logrotate日志轮转
https://blog.csdn.net/qq_34777982/article/details/107938327

logrotate日志轮转方式create和copytruncate原理
https://blog.csdn.net/sinat_40658206/article/details/125237578

进程平滑重启
https://blog.csdn.net/yizhou35/article/details/103106225

crontab和anacron和logrotate的关系详解
https://blog.csdn.net/damiaomiao666/article/details/72597731

Linux-- 定时服务crond VS anacron和 crontab VS anacrontab区别对比
https://blog.csdn.net/JustinQin/article/details/119378255

Logrotate日志切割轮询

由于Logrotate是基于CRON运行的,所以这个日志轮转的时间是由CRON控制的,具体可以查询CRON的配置文件/etc/anacrontab,过往的老版本的文件为(/etc/crontab)

查看轮转文件:/etc/anacrontab

cat /etc/anacrontab

    //就是运行计划任务的解释器,默认是bashSHELL=/bin/sh//执行命令的环境变量PATH=/sbin:/bin:/usr/sbin:/usr/bin//计划任务的出发者用户MAILTO=root//表示anacron在执行任务前先延时一段随机的时间再执行,这段随机的时间为0-45分钟之内的随机数。RANDOM_DELAY=45      //指定了只有在凌晨3点到晚上22点这个时间段内才允许执行任务START_HOURS_RANGE=3-221   5   cron.daily      nice run-parts /etc/cron.daily7   25  cron.weekly     nice run-parts/etc/cron.weekly@monthly 45 cron.monthly        nice run-parts/etc/cron.monthly

使用anacrontab轮转的配置文件,日志切割的生效时间是在凌晨3点到22点之间,而且随机延迟时间是45分钟,但是这样配置无法满足我们在现实中的应用

现在的需求是将切割时间调整到每天的晚上12点,即每天切割的日志是前一天的0-24点之间的内容,操作如下:

mv /etc/anacrontab /etc/anacrontab.bak //取消日志自动轮转的设置

使用crontab来作为日志轮转的触发容器来修改Logrotate默认执行时间

vi /etc/crontab

SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/ # run-parts01 * * * * root run-parts /etc/cron.hourly  //每个小时一分钟时执行59 23 * * * root run-parts /etc/cron.daily  //每天23时59分执行一次22 4 * * 0 root run-parts /etc/cron.weekly  //每周日4时22分执行一次42 4 1 * * root run-parts /etc/cron.monthly //每个月第一天的4时42分执行一次

第一段应该定义的是:分钟,表示每个小时的第几分钟来执行。范围是从0-59
  第二段应该定义的是:小时,表示从第几个小时来执行,范围是从0-23
  第三段应该定义的是:日期,表示从每个月的第几天执行,范围从1-31
  第四段应该定义的是:月,表示每年的第几个月来执行,范围从1-12
  第五段应该定义的是:周,表示每周的第几天执行,范围从0-6,其中 0表示星期日。
  第六段应该定义的是:用户名,也就是执行程序要通过哪个用户来执行,这个一般可以省略;
  第七段应该定义的是:执行的命令和参数。

解决logrotate无法自动轮询日志的办法

现象说明:

使用logrotate轮询nginx日志,配置好之后,发现nginx日志连续两天没被切割,检查后确定配置文件一切正常,这是为什么呢?
强行启动记录文件维护操作,纵使logrotate指令认为没有需要,应该有可能是logroate认为nginx日志太小,不进行轮询。
故需要强制轮询,即在/etc/cron.daily/logrotate脚本中将 -t 参数替换成 -f 参数

vim /etc/cron.daily/logrotate

#!/bin/sh/usr/sbin/logrotate /etc/logrotate.confEXITVALUE=$?if [ $EXITVALUE != 0 ]; then/usr/bin/logger -f logrotate "ALERT exited abnormally with [$EXITVALUE]"fiexit 0

最后最后重启下cron服务:

/etc/init.d/crond restart 或者 service crond restart

Stopping crond: [ OK ]

Starting crond: [ OK ]

服务器上的nginx使用logrotate来分割日志整个流程

crond服务加载 /etc/cron.d/0hourly —> 在每小时的01分执行/etc/cront.hourly/0anacron —>执行anacron —>根据/etc/anacrontab的配置执行/etc/cron.daily,/etc/cron.weekly,/etc/cron.monthly —>执行/etc/cron.daily/下的logrotate脚本 —>执行logrotate —>根据/etc/logrotate.conf配置执行脚本/etc/logrotate.d/nginx —>分割nginx日志成功
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

logrotate自定义日志轮转

因为anacrontab中定义的定时任务是3-22时执行且有时间延迟,如果想每天的0点让nginx进行日志轮转可以自己配置
首先,将/etc/logrotate.d/nginx文件删掉,以免进行重复轮转
其次,定义新的存放路径 /etc/logrotate.daily/nginx
然后,定时任务执行命令
0 0 * * * /usr/sbin/logrotate -f /etc/logrotate.daily/nginx. 每天0点0分执行
59 23 * * * /usr/sbin/logrotate -f /etc/logrotate.daily/nginx. 每天23点59分执行
如果crontab中定义的执行时间是0点,则需要在/etc/logrotate.d/nginx/nginxLogrotate里添加上dateyesterday这个选项,否则日志内容记录的是昨天的,而 日志名称格式却是今天的,但crontab中定义的执行时间是23:59这样的则不用添加dateyesterday选项

方法一

crontab -e
编辑完以后会保存到/var/spool/cron/root文件中

方法二

vi /etc/crontab
编辑时一定要指明用户,否则不生效
0 0 * * * root /usr/sbin/logrotate -f /etc/logrotate.daily/nginx
如果服务器都是有root来管理,建议添加crontab使用方法2,这样系统中的所有计划任务都在一起,一目了然。

注意:这里面需要指定用户名;而方法1中则不需要,如果指定了,它会认为是命令的一部分,从而可能导致crontab执行失败。

测试是否生效

/usr/sbin/logrotate -vfd /etc/logrotate.daily/nginx # 以debug测试是否生效,不会真的切割日志

/usr/sbin/logrotate -fv /etc/logrotate.daily/nginx # 强制生效并显示详细的输出信息

详细信息请用man logrotate查看

这篇关于Nginx日志轮转及Logrotate自定义日志轮转的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/204649

相关文章

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J

如何使用Nginx配置将80端口重定向到443端口

《如何使用Nginx配置将80端口重定向到443端口》这篇文章主要为大家详细介绍了如何将Nginx配置为将HTTP(80端口)请求重定向到HTTPS(443端口),文中的示例代码讲解详细,有需要的小伙... 目录1. 创建或编辑Nginx配置文件2. 配置HTTP重定向到HTTPS3. 配置HTTPS服务器

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

详解nginx 中location和 proxy_pass的匹配规则

《详解nginx中location和proxy_pass的匹配规则》location是Nginx中用来匹配客户端请求URI的指令,决定如何处理特定路径的请求,它定义了请求的路由规则,后续的配置(如... 目录location 的作用语法示例:location /www.chinasem.cntestproxy