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

相关文章

检查 Nginx 是否启动的几种方法

《检查Nginx是否启动的几种方法》本文主要介绍了检查Nginx是否启动的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1. 使用 systemctl 命令(推荐)2. 使用 service 命令3. 检查进程是否存在4

Python中4大日志记录库比较的终极PK

《Python中4大日志记录库比较的终极PK》日志记录框架是一种工具,可帮助您标准化应用程序中的日志记录过程,:本文主要介绍Python中4大日志记录库比较的相关资料,文中通过代码介绍的非常详细,... 目录一、logging库1、优点2、缺点二、LogAid库三、Loguru库四、Structlogphp

Nginx概念、架构、配置与虚拟主机实战操作指南

《Nginx概念、架构、配置与虚拟主机实战操作指南》Nginx是一个高性能的HTTP服务器、反向代理服务器、负载均衡器和IMAP/POP3/SMTP代理服务器,它支持高并发连接,资源占用低,功能全面且... 目录Nginx 深度解析:概念、架构、配置与虚拟主机实战一、Nginx 的概念二、Nginx 的特点

Nginx内置变量应用场景分析

《Nginx内置变量应用场景分析》Nginx内置变量速查表,涵盖请求URI、客户端信息、服务器信息、文件路径、响应与性能等类别,这篇文章给大家介绍Nginx内置变量应用场景分析,感兴趣的朋友跟随小编一... 目录1. Nginx 内置变量速查表2. 核心变量详解与应用场景3. 实际应用举例4. 注意事项Ng

kafka自定义分区器使用详解

《kafka自定义分区器使用详解》本文介绍了如何根据企业需求自定义Kafka分区器,只需实现Partitioner接口并重写partition()方法,示例中,包含cuihaida的数据发送到0号分区... 目录kafka自定义分区器假设现在有一个需求使用分区器的方法总结kafka自定义分区器根据企业需求

JAVA Log 日志级别和使用配置示例

《JAVALog日志级别和使用配置示例》本文介绍了Java中主流的日志框架,包括Logback和Log4j2,并详细解释了日志级别及其使用场景,同时,还提供了配置示例和使用技巧,如正确的日志记录方... 目录一、主流日志框架1. Logback (推荐)2. Log4j23. SLF4J + Logback

C++简单日志系统实现代码示例

《C++简单日志系统实现代码示例》日志系统是成熟软件中的一个重要组成部分,其记录软件的使用和运行行为,方便事后进行故障分析、数据统计等,:本文主要介绍C++简单日志系统实现的相关资料,文中通过代码... 目录前言Util.hppLevel.hppLogMsg.hppFormat.hppSink.hppBuf

GO语言zap日志库理解和使用方法示例

《GO语言zap日志库理解和使用方法示例》Zap是一个高性能、结构化日志库,专为Go语言设计,它由Uber开源,并且在Go社区中非常受欢迎,:本文主要介绍GO语言zap日志库理解和使用方法的相关资... 目录1. zap日志库介绍2.安装zap库3.配置日志记录器3.1 Logger3.2 Sugared

tomcat日志中文乱码问题及解决方案

《tomcat日志中文乱码问题及解决方案》文章主要介绍了在使用Tomcat时遇到的乱码问题及其解决方法,页面输出乱码可能由于server.xml配置、HTML标签、编程输出编码不一致引起,解决方法包括... 目录一、页面输出乱码1.server.XML配置未注明编码格式2.catalina.bawww.cp

Mysql利用binlog日志恢复数据实战案例

《Mysql利用binlog日志恢复数据实战案例》在MySQL中使用二进制日志(binlog)恢复数据是一种常见的用于故障恢复或数据找回的方法,:本文主要介绍Mysql利用binlog日志恢复数据... 目录mysql binlog核心配置解析查看binlog日志核心配置项binlog核心配置说明查看当前所