logrotate 日志管理

查看logrotate 是否已安装

因为linux安装软件的方式比较多,所以没有一个通用的办法能查到某些软件是否安装了。总结起来就是这样几类:

1、rpm包安装的,可以用rpm -qa看到,如果要查找某软件包是否安装,用 rpm -qa | grep “软件或者包的名字”。  

rpm -qa | grep ruby


2、以deb包安装的,可以用dpkg -l能看到。如果是查找指定软件包,用 dpkg -l | grep “软件或者包的名字”;

dpkg -l | grep ruby


3、yum方法安装的,可以用yum list installed查找,如果是查找指定包,命令后加 | grep “软件名或者包名”;

yum list installed | grep ruby


4、如果是以源码包自己编译安装的,例如.tar.gz或者tar.bz2形式的,这个只能看可执行文件是否存在了,

上面两种方法都看不到这种源码形式安装的包。如果是以root用户安装的,可执行程序通常都在/sbin:/usr/bin目录下。

说明:其中rpm yum 是Redhat系linux的软件包管理命令,dpkg是debian系列的软件包管理命令。

安装 logrotate

 在Debian或Ubuntu上:

 apt-get install logrotate cron 

    在Fedora,CentOS或RHEL上:

yum install logrotate crontabs

查看logrotate 安装位置 

whereis logrotate;

logrotate的配置文件是/etc/logrotate.conf,通常不需要对它进行修改。日志文件的轮循设置在独立的配置文件中,它(们)放在/etc/logrotate.d/目录下 

 logrotate 命令

 语法: logrotate (选项) (参数)

 选项:

     -?或--help:在线帮助;
     -d或--debug:详细显示指令执行过程,便于排错或了解程序执行的情况;
     -f或--force :强行启动记录文件维护操作,纵使logrotate指令认为没有需要亦然;
     -s<状态文件>或--state=<状态文件>:使用指定的状态文件;
     -v或--version:显示指令执行过程;
     -usage:显示指令基本用法。

 参数:要执行的配置文件名称

示例:

日志文件存放位置 /var/log/ 文件夹下(包括分割的日志文件),配置文件在/etc/logrotate.d/ 文件夹下

创建文件:

touch /var/log/log-file
echo 1111 >>  /var/log/log-file

为该文件创建一个配置文件:

vim /etc/logrotate.d/log-file #打开文件 自定义配置文件名称
# 写入配置  /var/log/log-file 要分割的日志文件名称  与配置文件名称无关
/var/log/log-file {
    monthly
size=50M rotate
5 dateext
   compress delaycompress missingok notifempty create
644 root root postrotate /usr/bin/killall -HUP rsyslogd endscript }

配置解析:

  • monthly: 日志文件将按月轮循。其它可用值为‘daily’,‘weekly’或者‘yearly’。
  • size: 指定文件当天达到50M的时候才转储
  • rotate 5: 一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。
  • dateext: 让旧日志文件以创建日期命名
  • compress: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩。
  • delaycompress: 总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。
  • missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
  • notifempty: 如果日志文件为空,轮循不会进行。
  • create 644 root root: 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。
  • postrotate/endscript: 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。

运行 logrotate

要调用为/etc/lograte.d/下配置的所有日志调用logrotate:

logrotate /etc/logrotate.conf 

  要为某个特定的配置调用logrotate:

logrotate /etc/logrotate.d/log-file #log-file 日志分割的配置文件名称

  排障过程中的最佳选择是使用‘-d’选项以预演方式运行logrotate。要进行验证,不用实际轮循任何日志文件,可以模拟演练日志轮循并显示其输出。

[root@thh69amnzzZ log]# logrotate -d /etc/logrotate.d/log-file

reading config file /etc/logrotate.d/log-file reading config info for /var/log/log-file Handling 1 logs rotating pattern: /var/log/log-file monthly (5 rotations) empty log files are not rotated, old logs are removed considering log /var/log/log-file log does not need rotating not running postrotate script, since no logs were rotated

   正如我们从上面的输出结果可以看到的,logrotate判断该轮循是不必要的。如果文件的时间小于一天,这就会发生了。

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

logrotate -vf /etc/logrotate.d/log-file

  如果处于排障目的,我们想要logrotate记录到任何指定的文件,我们可以指定像下面这样从命令行指定。

logrotate -vf –s /var/log/logrotate-status /etc/logrotate.d/log-file #logrotate-status 记录着 log-file 文件的记录

  [root@thh69amnzzZ log]# cat logrotate-status
   logrotate state -- version 2
   "/var/log/log-file" 2018-3-17

最后根据需求写一个脚本添加  crontab , 定时时间执行即可

编写sh 脚本

#/etc/cron.daily/logrotate
#! /bin/sh
/usr/sbin/logrotate /etc/logrotate.conf  #/etc/logrotate.d/log-file 根据自己的需求

在 /var/spool/cron 目录中打开 root 文件,[ 配置说明文件cat /etc/crontab ]添加:

cron 格式
   */1        *              *            *            *      绝对路径脚本文件路径文件名称
#分钟(0~59)  小时(0~23)   几号(1~31)   几月(1~12)  星期几(0~7)      命令
#每行代表都代表一个任务

文件引用:

    Linux日志文件总管——logrotate

       Liunx 自动执行任务

    Linux定时任务Crontab详解    

    使用 logrotate 进行 nginx 日志分割

原文地址:https://www.cnblogs.com/xuey/p/8590696.html