【问题标题】:Is it possible to run one logrotate check manually?是否可以手动运行一项 logrotate 检查?
【发布时间】:2011-01-08 05:37:20
【问题描述】:

是否可以手动运行一次 logrotate 迭代而不在某个时间间隔安排它?

【问题讨论】:

  • logrotate 的问题在于它有一个全局配置文件,它不允许您运行单个日志轮换子配置文件,同时仍然应用全局配置文件中设置的选项。也就是说,它没有一种只运行一个日志轮换文件检查的好方法,就像每晚从 cron 运行时一样。它可以使用“限制这些日志文件”选项,或者更好的是,“运行全局配置,但只包含这个子配置文件”。

标签: logging logrotate


【解决方案1】:

是的:logrotate --force $CONFIG_FILE

【讨论】:

  • 请注意,--force 将旋转文件,即使它们不符合指定条件,例如最小大小、年龄等。
  • 如果您将 logrotate 配置文件放在 /etc/logrotate.d/custom.conf 中,这是否意味着您不需要指定日志应该自动旋转的大小/时间?或者如果您不打算让它自动旋转,您应该将配置放在不同的文件夹中?
  • 条件“notifempty”不会被“--force”忽略。这让我难了一阵子,所以我提到这是@xofer 声明的一个例外。
  • 你可以用logrotate --force /etc/logrotate.d/(只是目录名)来旋转所有的
  • 即使文件不符合条件(年龄、大小等),--force 确实会强制轮换,但请注意这是发现 logrotate -d 实际问题的唯一方法不会出现(例如,由于 logrotate 几个月没有运行,我的服务器空间不足......感谢--force 我发现有File exists 错误。我手动删除了这些文件,现在轮换再次正常工作!
【解决方案2】:

logrotate -d [your_config_file] 调用调试模式,为您详细描述会发生的情况,但不影响日志文件。

【讨论】:

  • 那些来到这里寻找诸如“我如何测试我的 logrotate conf?”之类问题的答案的人。可以将此作为答案,因为它只是测试 conf
  • 不喜欢你的方法,我试过logrotate --force 并且效果很好。
  • 我来这里是为了寻找为什么我的日志没有轮换的答案。这对我来说是完美的答案,即使它不是原始问题的确切答案。
  • 如果您想运行并实际进行更改,请运行logrotate -v <your_config_file>,其中 -v 用于详细显示屏幕上的日志。
  • 伙计们,如果您的配置中有错误,这不会返回非零状态代码。
【解决方案3】:

如果您想强制运行单个特定目录或守护进程的日志文件,您通常可以在/etc/logrotate.d 中找到配置,它们将独立运行。

请记住,/etc/logrotate.conf 中指定的全局配置将不适用,因此如果您这样做,您应该确保在 /etc/logrotate.d/[servicename] 配置文件中指定所有您想要的选项。

你可以用-d试试看会发生什么:

logrotate -df /etc/logrotate.d/nginx

然后就可以运行了(以nginx为例):

logrotate -f /etc/logrotate.d/nginx

并且单独的 nginx 日志将被轮换。

【讨论】:

  • 这很好,但是您会丢失“/etc/logrotate.conf”中的所有全局设置。我编写了一个脚本将全局和特定的 logrotate 文件合并在一起,然后使用它来解决这个问题。 (见我的回答)。
  • 使用logrotate -d /etc/logrotate.conf 也会运行任何其他包含的conf文件。
【解决方案4】:

您可能希望以详细 + 强制模式运行它。

logrotate -vf /etc/logrotate.conf

【讨论】:

    【解决方案5】:

    所有logrotate的运行方式是:

    logrotate -f /etc/logrotate.conf
    

    这将运行主 logrotate 文件,其中还包括其他 logrotate 配置

    【讨论】:

      【解决方案6】:

      发出以下命令,指定logrotate的运行方式:

      logrotate -vf /etc/logrotate.d/custom
      

      选项:

      -v :显示过程

      -f :强制运行

      自定义:用户自定义日志设置

      例如: mongodb日志

      # mongodb-log rotate
      
      /data/var/log/mongodb/mongod.log {
          daily
          dateext
          rotate 30
          copytruncate
          missingok
      }
      

      【讨论】:

      【解决方案7】:

      编辑 /var/lib/logrotate.status(或 /var/lib/loglogrotate/logrotate.status)以重置您要测试的日志文件的“最后轮换”日期。

      然后运行logrotate YOUR_CONFIG_FILE

      或者您可以使用 --force 标志,但编辑 logrotate.status 可以让您更精确地确定旋转和不旋转的内容。

      【讨论】:

      • 这个 /var/lib/logrotate.status 文件在 Debian Squeeze 上不存在。
      • 试试 /var/lib/logrotate/status。我不确定这是否是 debian/redhat 的东西,或者我是否输入了“。”我应该把“/”放在哪里。
      【解决方案8】:

      创建了一个shell脚本来解决这个问题。

      https://antofthy.gitlab.io/software/#logrotate_one

      此脚本将仅运行“/etc/logrotate.d”中的单个 logrotate 子配置文件,但包含全局配置文件“/etc/logrotate.conf”中的全局​​设置。您也可以使用其他选项进行测试...

      例如...

        logrotate_one -d syslog
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-13
        • 1970-01-01
        • 2022-08-14
        • 1970-01-01
        相关资源
        最近更新 更多