logrotate 配置和执行

pno*_*ata 4 linux logging purge logrotate

我正在尝试配置logrotate为每天午夜轮换和删除日志文件,但以前从未使用过它。所以:(a) 我想确认我的配置是正确的,并且 (b) 我需要帮助在午夜自动执行它的日常执行。

我的软件在/abs/path/to/log/myapp-log.txt. 这是我想要发生的事情:

  • 为每个日志文件添加时间戳,名称中带有日期扩展名
  • /abs/path/to/log/在任何时间点只有 1 个日志文件;所以每次轮换日志并创建一个新的日志文件时,删除旧的

logrotate.conf

/abs/path/to/log/myapp-log.txt {
    daily
    copytruncate
    create 700 myUser myGroup
    dateext
    maxage 1
    missingok
}
Run Code Online (Sandbox Code Playgroud)

我在这里不确定的一些事情:

  • 我是否需要指定daily是否指定 a maxageof 1?
  • 究竟在missingok做什么?如果日志文件不存在,则忽略系统警告?如果我不指定missingok并且日志文件不存在会发生什么?
  • copytruncate如果我指定daily/ ,我什至需要maxage 1吗?这三个设置感觉有点多余,但不确定每一个扮演什么角色。

其次,我如何确保每天午夜运行?克朗?我之所以这么问,是因为我读到了/etc/cron.daily/logrotate每天自动运行的某个地方,但不确定它是如何配置的。提前致谢。

Joh*_*Siu 11

  1. 如果我指定的最大值为 1,是否需要每天指定?

    是的,您每天都需要,因为您希望此部分每天都执行。这控制了部分的执行频率,而maxage控制了旋转文件的保留时间。它们是两种不同的东西。

  2. missingok 到底在做什么?

    missingok意味着如果用于轮换的日志文件不存在,logrotate 将不会抱怨/生成错误。如果未指定,并且缺少用于轮换的日志文件,logrotate 将生成错误日志。

  3. 如果我指定 daily/maxage 1,我什至需要 copytruncate 吗?

    如果copytruncate现在对您有用,请不要更改它。它适用于原始日志文件

    copytruncate 指示 logrotate 创建原始文件的副本(即旋转原始日志文件)并将原始文件截断为零字节大小。这有助于属于该日志文件的相应服务可以写入正确的文件。

  4. 在午夜运行 logrotate

    有2种方法可以做到。

    • 方法 1 - 更改每日 cron 运行时间

      /etc/crontab 中查找以下行

      25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
      
      Run Code Online (Sandbox Code Playgroud)

      25 6(表示 6:25AM)更改为0 0。这也将所有每日 cron 作业的开始时间更改为午夜。

    • 方法 2 - 使用自定义 crontab 行

      将 logrotate 移出默认的每日 cron 计划

      mv /etc/cron.daily/logrotate /etc/logrotate.cronjob
      
      Run Code Online (Sandbox Code Playgroud)

      创建自定义 cron 作业。将以下行添加到/etc/crontab

      0 0 * * * root /etc/logrotate.cronjob
      
      Run Code Online (Sandbox Code Playgroud)