由 systemd OnBootSec 触发时 logrotate 未运行

问题描述

一个

Linux xxxxx 4.19.0-16-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64 GNU/Linux

system 我试图仅在系统启动时运行 logrotate,而不是在任何其他计划中运行。

/etc/logrotate.conf 包含:

weekly
rotate 99
create
dateext
dateformat .%Y.%m.%d.%H.%M.%s
include /etc/logrotate.d

使用

systemctl 编辑 logrotate.timer

/etc/systemd/system/logrotate.timer.d/override.conf

包含:

[Unit]
Description=
Description=On boot rotation of log files

[Timer]
OnCalendar=
OnBootSec=1us
AccuracySec=2us

使用

systemctl 编辑 logrotate.service

/etc/systemd/system/logrotate.service.d/override.conf

包含:

[Unit]
ConditionACPower=

[Service]
ExecStart=
ExecStart=/usr/sbin/logrotate -fv /etc/logrotate.conf

启动和登录后,systemctl status 将 logrotate.timer 显示为已加载的活动已用时间,将 logrotate.service 显示为已加载的非活动已死。系统启动时没有发生实际的 logrotate。我在任何日志文件中都没有看到错误消息。其他看起来都不错。

当我跑步时

logrotate -fv /etc/logrotate.conf

手动,日志轮换按预期执行。所以,我假设没有 logrotate 设置错误

这里的任何人都知道出了什么问题和/或如何调试或修复它?谢谢!

解决方法

要在每次系统启动时只运行一次 logrotate,请执行以下操作:

从任何 cron / anacron 计划中删除 logrotate。

禁用 logrotate.timer:

systemctl 禁用 logrotate.timer

覆盖 logrotate.service

systemctl 编辑 logrotate.service

并在override.conf中输入以下内容:

[Unit]
ConditionACPower=
RequiresMountsFor=/var/log
DefaultDependencies=no
Before=syslog.service
[Service]
ExecStart=
ExecStart=/usr/sbin/logrotate -fv /etc/logrotate.conf
RemainAfterExit=yes
[Install]
WantedBy=local-fs.target

这适用于原始的 Debian 系统(没有图形桌面,即服务器)。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...