1、把自己的日志加入日志轮替

使用RPM包方式安装服务的日志会自动的加入logrotate轮替,一般不需要你介入。

而使用源码包方式安装服务的日志,需要手工把该服务的日志加入到logrotate.conf配置文件中。

所以源码包方式安装服务的日志和手动指定的日志,是需要自己手动加入logrotate日志轮替。

(1)操作方式

有两个方法:

  • 第一种方法是直接在/etc/logrotate.conf配置文件中写入该日志的轮替策略,从而把日志加入logrotate轮替。
  • 第二种方法是在/etc/logrotate.d/目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被"include"到主配置文件中,所以也可以把日志加入轮替。

推荐第二种方法,因为系统中需要轮替的日志非常多,如果全都直接写入/etc/logrotate.conf配置文件,那么这个文件的可管理性就会非常差,不利于此文件的维护。

(2)示例

我们在/var/log/目录中创建要给testerr.log日志文件,这个日志不是系统默认日志,所以默认这个日志是不会轮替的,那么我们需要把这个日志加入日志轮替的策略。

拓展:

  • 有个典型应用就是给予特定的日志加入chattra属性,如果系统文件加入了a属性,那么这个文件就只能增加数据,但是不能删除和修改已有的数据了,而且root用户也不能例外。
  • 所以我们会给重要的日志文件加入a属性,这样的话可以保护日志文件不被恶意修改。不过一旦加入了a属性,那么日志轮替时,这个日志文件是不能被改名的,当然也就不能进行日志轮替了。所以我们可以利用prerotatepostrotate来修改日志文件的chattra属性。在下一个小节,我们会具体说明下这两个参数的使用。

采用第二种方式实现,如下:

#先给日志文件赋予chattr的a属性,保证日志的安全。
[root@localhost ~]# chattr +a /var/log/testerr.log # 创建testerr轮替文件,
[root@localhost ~]# vim /etc/logrotate.d/testerr # 把/var/log/testerr.log日志文件加入轮替。
/var/log/testerr.log{
weekly <-- 每周轮替一次
rotate 6 <-- 保留6个轮替日志
sharedscripts <-- 以下命令只执行一次
prerotate <-- 在日志轮替之前执行
# 在日志轮替之前取消a属性,以便让日志可以轮替。
usr/bin/chattr -a /var/log/testerr.1og
endscript <-- 脚本结束 sharedscripts
postrotate <-- 在日志轮替之后执行
# 日志轮替之后,重新加入a属性。
/usr/bin/chattr +a /var/log/testerr.log
endscript sharedscripts
postrotate
# 重启rsyslog服务,保证日志轮替正常。
/bin/kill -HUP $(/bin/cat /var/run/syslogd.pid 2>/dev/null) &>/dev/null
endscript

练习2:把Nginx服务的日志加入日志轮替,需要重启Nginx服务。

# 假设Nginx的日志放在/date目录下
/date/logs/nginx/access/access.log
/date/logs/nginx/access/default.log
{
daily
rotate 15
sharedscripts
postrotate
#重启rsyslog服务
/bin/kill -HUP $(/bin/cat /var/run/syslogd.pid) &>/dev/null
#重启Nginx服务
/bin/kill -HUP $(/bin/cat /usr/local/nginx/1ogs/nginx.pid) &>/dev/null
endscript
}

实际工作中就可以以此为例。

提示:Linux系统自身日志或者使用RPM包方式安装服务的日志,需要重启。

2、logrotate命令

我们日志轮替之所以可以在指定的时间备份日志,其实也要依赖系统定时任务。如果大家还记得/etc/cron.daily/目录,就会发现这个目录中是有logrotate文件,logrotate命令通过这个文件依赖定时任务执行的。

logrotate命令的格式:

[root@localhost ~]# logrotate [选项] 配置文件名

选项:
如果此命令没有选项,则会按照配置文件中的条件进行日志轮替。
-v:显示日志轮替过程。
-f:强制进行日志轮替。不管日志轮替的条件是否已经符合,强制配置文件中所有的日志进行轮替。

注意:logrotate命令一般不需要我们执行,需要强制轮替的时候才需要执行。

我们执行logrotate命令,并查看下执行过程:

# 查看日志轮替的流程
[root@localhost ~]# logrotate -v /etc/logrotate.conf # 截取一个日志轮替说明
# 这就是我们自己加入轮替的testerr.log日志。
rotating pattern:/var/log/testerr.log weekly(6 rotations)
empty log files are rotated,old logs are removed
considering log/var/log/testerr.log
log does not need rotating <-- 时间不够一周,所以不进行日志轮替

我们发现/var/log/testerr.log加入了日志轮替,已经被logrotate识别并调用了。只是时间没有达到轮替的标准,所以没有进行轮替。

那我们强制进行一次日志轮替,看看有什么结果:

# 强制进行日志轮替,不管是否符合轮替条件
[root@localhost ~]# logrotate -vf /etc/logrotate.conf # 目标testerr.log日志文件片段
rotating pattern:/var/log/testerr.1og forced from command line(6 rotations)
empty log files are rotated,old logs are removed
considering 1og/var/log/testerr.log
log needs rotating <-- 日志需要轮替 rotating log/var/log/testerr.log,log->rotateCount is 1
dateext suffix'-20200618' <-- 提取日期参数
glob pattern'-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
running prerotate script
fscreate context set to unconfined_u:object_r:var_log_t:s0 # 旧的日志被重命名
renaming/var/log/testerr.log to /var/log/testerr.log-20200618 # 创建新日志文件,同时制定权限、所有者和属组
creating new/var/log/testerr.log mode= 0600 uid =0 gid=0
running postrotate script

我们发现testerr.log日志已经完成了日志轮替。

我们查看下新产生的日志和旧日志:

[root@localhost ~]# ll /var/log/testerr.log*
# 旧日志文件已经转储
-rw-------. 1 root root 0 6月 7 10:07/var/log/testerr.log
-rw-------. 1 root root 237 6月 18 09:58/var/log/testerr.log-20200618 # 新的日志文件被自动加入了chattr的a属性。
[root@localhost ~]# lsattr /var/1og/testerr.log
-a------e- /var/1og/alert.log

logrotate命令使用“-f"选项之后,就不管日志是否已经符合了日志轮替条件,而强制把所有的日志都进行了轮替。

『学了就忘』Linux日志管理 — 93、日志轮替补充的更多相关文章

  1. 『学了就忘』Linux权限管理 — 55、文件特殊权限

    目录 1.文件特殊权限说明 2.设置SetUID 3.检测SetUID的脚本 4.设置SetGID (1)针对文件的作用 (2)针对目录的作用 5.Sticky BIT 6.设定文件特殊权限 7.文件 ...

  2. 『学了就忘』Linux软件包管理 — 40、Linux系统软件包介绍

    目录 1.Linux系统软件包分类 2.源码包说明 3.二进制包说明 4.RPM包的优缺点 4.RPM包的两种安装方法 5.总结 1.Linux系统软件包分类 Linux系统下的软件包只有源码包和二进 ...

  3. 『学了就忘』Linux软件包管理 — 42、对RPM软件包的查询操作

    目录 1.查询RPM软件包是否安装 2.查询系统中所有已安装的RPM软件包 3.查询RPM软件包的详细信息 4.查询RPM软件包中的文件列表 5.查询系统文件属于哪个RPM包 6.查询RPM软件包所依 ...

  4. 『学了就忘』Linux软件包管理 — 44、在RPM包中提取文件

    目录 1.RPM包中文件的提取 2.在RPM包中提取文件的操作 (1)cpio命令介绍 (2)提取RPM包中文件 1.RPM包中文件的提取 为什么要做这个事呢? 在操作Linux系统的时候误删除一个文 ...

  5. 『学了就忘』Linux软件包管理 — 47、Linux源码包的安装和卸载

    目录 1.源码包安装服务的注意事项 2.源码包安装服务的过程 3.源码包安装服务的删除 4.源码包安装服务的启动 5.源码包安装服务的关闭 1.源码包安装服务的注意事项 (1)安装服务选择哪种软件包? ...

  6. 『学了就忘』Linux软件包管理 — 49、拓展:Linux中通过脚本安装程序

    目录 1.脚本程序简介 2.Webmin安装 (1)简介 (2)安装 (3)使用 1.脚本程序简介 脚本程序包并不多见,所以在软件包分类中并没有把它列为一类.它更加类似于Windows下的程序安装,有 ...

  7. 『学了就忘』Linux用户管理 — 50、用户管理相关文件详细说明

    目录 1.用户信息文件 2./etc/shadow影子文件 3./etc/group 组信息文件 4.组密码文件 5.用户的家目录 6.用户邮箱目录 7.用户模板目录 总结: 提示:严格的用户权限划分 ...

  8. 『学了就忘』Linux用户管理 — 51、用户管理相关命令

    目录 1.添加用户(useradd命令) 2.设定密码(passwd命令) 3.用户信息修改(usermod命令) 4.删除用户(userdel命令) 5.切换用户身份(su命令) 1.添加用户(us ...

  9. 『学了就忘』Linux权限管理 — 53、ACL权限详解

    目录 1.什么是ACL权限 2.开启ACL 3.ACL权限的相关命令 (1)设定ACL权限 (2)查询文件的ACL权限 (3)设置文件ACL权限给用户组 (4)给文件夹和里边的文件同时赋予ACL权限 ...

  10. 『学了就忘』Linux权限管理 — 54、sudo授权

    目录 1.什么是sudo授权 2. sudo授权说明 3.sudo命令的使用 示例1 示例2 示例3 1.什么是sudo授权 在Linux系统中,/sbin/和/usr/sbin/两个目录中的命令只有 ...

随机推荐

  1. 洛谷 P3781 - [SDOI2017]切树游戏(动态 DP+FWT)

    洛谷题面传送门 SDOI 2017 R2 D1 T3,nb tea %%% 讲个笑话,最近我在学动态 dp,wjz 在学 FWT,而我们刚好在同一天做到了这道题,而这道题刚好又是 FWT+动态 dp ...

  2. 水平梯度在sigma坐标对应形式

    sigma 坐标变换 一般 \(\sigma\) 坐标转换方程为 \[\sigma = \frac{z-\eta}{D} = \frac{z-\eta}{H+\eta} \] 转换后水深 z 范围由原 ...

  3. 【Plink】Error: Multiple instances of '_' in sample ID.?

    目录 前言 原因 解决方法 方法一:修改样本名 方法二:修改--id-delim 方法三:加入--double_id或--const-fid参数 前言 将vcf转化为plink格式时,命令如下: pl ...

  4. snakmake 小练习

    最近在学习snakemake 用于生信流程管理,现在用一个snakemake 来完成小任务:将在某一文件夹下的多个bam文件截取一部分,然后建立索引,在提取出fastq序列,最后比对回基因组. 需要两 ...

  5. R语言与医学统计图形-【20】ggplot2图例

    ggplot2绘图系统--图例:guide函数.标度函数.overrides.aes参数 图例调整函数guide_legend也属于标度函数,但不能单独作为对象使用,即不能如p+guide_legen ...

  6. 关于GCC编译

    GCC参数详解 gcc是gnu compiler collection 的简称,他包含了多种语言的编译器,如C, C++, Objective-C, Objective-C++, Java, Fort ...

  7. urllib的基本使用介绍

    1. urllib中urlopen的基本使用介绍 1 ### urllib中urlopen的基本使用介绍 2 3 ## urlopen的基本用法(GET请求) 4 import urllib.requ ...

  8. SpringBoot 整合 MyBatis,实现 CRUD 示例

    目录 前言 创建项目/模块 SpringBoot Console Application CommandLineRunner SpringBoot 集成 MyBatis 创建数据库/表 配置数据源/连 ...

  9. 从源码看RequestMappingHandlerMapping的注册与发现

    1.问题的产生 日常开发中,大多数的API层中@Controller注解和@RequestMapping注解都会被使用在其中,但是为什么标注了@Controller和@RequestMapping注解 ...

  10. Nginx流量拷贝

    1. 需求 将生产环境的流量拷贝到预上线环境或测试环境,这样做有很多好处,比如: 可以验证功能是否正常,以及服务的性能: 用真实有效的流量请求去验证,又不用造数据,不影响线上正常访问: 这跟灰度发布还 ...