CentOS7下日志轮转logrotate简单入门与实践_日志文件


CentOS7下日志轮转logrotate简单入门与实践

一、logrotate介绍

logrotate​是一个日志文件管理工具。用来把旧文件轮转、压缩、删除,并且创建新的日志文件。我们可以根据日志文件的大小、天数等来转储,便于对日志文件管理,一般都是通过cron计划任务来完成的

1、CentOS7发行版上都默认安装有logrotate包

rpm -qa | grep logrotate
rpm -ql logrotate

CentOS7下日志轮转logrotate简单入门与实践_配置文件_02

(图片可放大查看)

2、logrotate的配置文件

logrotate的配置文件是/etc/logrotate.conf,通常不需要对它进行修改。

可以针对特定应用程序或服务日志文件的轮循设置在独立的配置文件中,放在/etc/logrotate.d/目录下

cat /etc/logrotate.conf
cd /etc/logrotate.d/
ls -l

CentOS7下日志轮转logrotate简单入门与实践_日志文件_03

(图片可放大查看)

3、以nginx的日志轮转配置为例

/var/log/nginx/*log {
create 0664 nginx root
daily
rotate 10
missingok
notifempty
compress
sharedscripts
postrotate
/bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
endscript
}

CentOS7下日志轮转logrotate简单入门与实践_nginx_04

(图片可放大查看)

参数说明:


  • create 0644 nginx root​: 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件
  • daily​:日志文件将按日轮循
  • rotate 10​: 一次将存储10个归档日志。对于第11个归档,时间最久的归档将被删除
  • missingok​: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
  • notifempty​: 如果日志文件为空,轮循不会进行。
  • compress​: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩
  • postrotate/endscript:​ 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行

4、logrotate日志轮转实操举例

CentOS7下日志轮转logrotate简单入门与实践_配置文件_05

(图片可放大查看)

1)、排障过程中的最佳选择是使用‘-d’选项以预演方式运行logrotate

logrotate -d /etc/logrotate.d/nginx

CentOS7下日志轮转logrotate简单入门与实践_配置文件_06

(图片可放大查看)

从上面的输出结果可以看到的,logrotate判断该轮循是不必要的

2)、即使轮循条件没有满足,我们也可以通过使用‘-f’选项来强制logrotate轮循日志文件,‘-v’参数提供了详细的输出

logrotate -vf /etc/logrotate.d/nginx

CentOS7下日志轮转logrotate简单入门与实践_配置文件_07

(图片可放大查看)

CentOS7下日志轮转logrotate简单入门与实践_配置文件_08

(图片可放大查看)

二、crontab实现定时任务

linux内置的cron进程能帮我们实现定时执行某些任务的需求,cron搭配shell脚本,非常复杂的指令也没有问题。

cron介绍

cron守护进程是一个由实用程序和配置文件组成的小型子系统,在几乎所有类 UNIX 系统上都可以找到某种风格的cron,我们可以用ps aux|grep cron找到crond这个守护进程。我们经常使用的是crontab命令是cron table的简写,它是cron的配置文件,也可以叫它作业列表,我们可以在以下文件夹内找到相关配置文件。


  • /var/spool/cron/ 目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名
  • /etc/crontab 这个文件负责调度各种管理和维护任务。
  • /etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。

我们还可以把脚本放在/etc/con.hourly、/etc/con.daily、/etc/con.weekly、/etc/con.monthly目录中,让它每小时/天/星期、月执行一次。

CentOS7下日志轮转logrotate简单入门与实践_nginx_09

(图片可放大查看)

crontab的使用

我们常用的命令如下:

crontab [-u username]    //省略用户表表示操作当前用户的crontab
-e (编辑工作表)
-l (列出工作表里的命令)
-r (删除工作)

我们用crontab -e进入当前用户的工作表编辑,是常见的vim界面。每行是一条命令。crontab的命令构成为 时间+动作,其时间有分、时、日、月、周五种,操作符有

* 取值范围内的所有数字
/ 每过多少个数字
- 从X到Z
, 散列数字

aaaa

以下是几个例子

时间                  注释
0 0 25 12 * //在12月25日的0时0分
*/5 * * * * //每过5分钟
* 4-6 * * * //每天的4 5 6点
* * * * 2,5 //每周二和周五

三、crontab与logrotate配合使用举例

例如:每10分钟轮转/opt/logs/下的日志文件 当日志文件大小达到100M时进行轮转,最多保留5个

crontab -l
*/10 * * * * /usr/sbin/logrotate /etc/logrotate.d/optlogs

cat /etc/logrotate.d/optlogs
'/opt/logs/*.log' {
create 0664 root root
size 100M
rotate 5
missingok
notifempty
compress
sharedscripts
postrotate
/usr/bin/killall -HUP rsyslogd
endscript
}

CentOS7下日志轮转logrotate简单入门与实践_nginx_10

(图片可放大查看)

CentOS7下日志轮转logrotate简单入门与实践_配置文件_11

(图片可放大查看)