logrotate配置与执行

logrotate配置与执行

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

我的软件在 时生成一个大型日志文件/abs/path/to/log/myapp-log.txt。以下是我希望发生的情况:

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

logrotate.conf

/abs/path/to/log/myapp-log.txt {
    daily
    copytruncate
    create 700 myUser myGroup
    dateext
    maxage 1
    missingok
}

这里有几件事我不确定:

  • daily如果我指定1,是否需要指定maxage
  • 它到底在missingok做什么?如果没有日志文件,是否会忽略系统警告?如果我没有指定missingok并且日志文件不存在,会发生什么?
  • copytruncate如果我指定daily/ ,我是否还需要它maxage 1?这三个设置感觉有点多余,但不确定每个设置起什么作用。

其次,我如何确保它每天午夜运行?Cron?我之所以问这个问题,是因为我在某处读到过它/etc/cron.daily/logrotate每天自动运行,但不确定如何配置。提前致谢。

答案1

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

    是的,你需要日常的您希望此部分每天执行。这控制了该部分的执行频率,而马萨吉控制轮换文件的保存时间。它们是两个不同的东西。

  2. missingok 到底在做什么?

    missok表示如果不存在要轮换的日志文件,logrotate 将不会发出抱怨/生成错误。如果未指定此项,并且缺少要轮换的日志文件,logrotate 将生成错误日志。

  3. 如果我指定 daily/maxage 1,我是否还需要 copytruncate?

    如果复制截断正在为您工作,不要更改它。它适用于原始日志文件

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

  4. 在午夜运行 logrotate

    有两种方法可以做到这一点。

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

      查找以下行/etc/crontab

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

      改变二十五 6(即早上 6:25),0 0.这也改变了全部每日 cron 任务的开始时间到午夜。

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

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

      mv /etc/cron.daily/logrotate /etc/logrotate.cronjob
      

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

      0 0 * * * root /etc/logrotate.cronjob
      

相关内容