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

相关文章

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

SpringBoot如何使用TraceId日志链路追踪

《SpringBoot如何使用TraceId日志链路追踪》文章介绍了如何使用TraceId进行日志链路追踪,通过在日志中添加TraceId关键字,可以将同一次业务调用链上的日志串起来,本文通过实例代码... 目录项目场景:实现步骤1、pom.XML 依赖2、整合logback,打印日志,logback-sp

centos7基于keepalived+nginx部署k8s1.26.0高可用集群

《centos7基于keepalived+nginx部署k8s1.26.0高可用集群》Kubernetes是一个开源的容器编排平台,用于自动化地部署、扩展和管理容器化应用程序,在生产环境中,为了确保集... 目录一、初始化(所有节点都执行)二、安装containerd(所有节点都执行)三、安装docker-

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

一文带你搞懂Nginx中的配置文件

《一文带你搞懂Nginx中的配置文件》Nginx(发音为“engine-x”)是一款高性能的Web服务器、反向代理服务器和负载均衡器,广泛应用于全球各类网站和应用中,下面就跟随小编一起来了解下如何... 目录摘要一、Nginx 配置文件结构概述二、全局配置(Global Configuration)1. w

SpringBoot 自定义消息转换器使用详解

《SpringBoot自定义消息转换器使用详解》本文详细介绍了SpringBoot消息转换器的知识,并通过案例操作演示了如何进行自定义消息转换器的定制开发和使用,感兴趣的朋友一起看看吧... 目录一、前言二、SpringBoot 内容协商介绍2.1 什么是内容协商2.2 内容协商机制深入理解2.2.1 内容

若依部署Nginx和Tomcat全过程

《若依部署Nginx和Tomcat全过程》文章总结了两种部署方法:Nginx部署和Tomcat部署,Nginx部署包括打包、将dist文件拉到指定目录、配置nginx.conf等步骤,Tomcat部署... 目录Nginx部署后端部署Tomcat部署出现问题:点击刷新404总结Nginx部署第一步:打包

Nginx、Tomcat等项目部署问题以及解决流程

《Nginx、Tomcat等项目部署问题以及解决流程》本文总结了项目部署中常见的four类问题及其解决方法:Nginx未按预期显示结果、端口未开启、日志分析的重要性以及开发环境与生产环境运行结果不一致... 目录前言1. Nginx部署后未按预期显示结果1.1 查看Nginx的启动情况1.2 解决启动失败的

tomcat在nginx中的配置方式

《tomcat在nginx中的配置方式》文章介绍了如何在Linux系统上安装和配置Tomcat,并通过Nginx进行代理,首先,下载并解压Tomcat压缩包,然后启动Tomcat并查看日志,接着,配置... 目录一、下载安装tomcat二、启动tomcat三、配置nginx总结提示:文章写完后,目录可以自动