问题描述
在一个
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.servicesystemctl 编辑 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 系统(没有图形桌面,即服务器)。