为什么 logrotate 不能正确地 postrotate 只有 1 天的延迟

Why logrotate doesn't properly postrotate only has 1 day delay

我在 /etc/logrotate.d/mikrotik :

/var/log/mikrotik.log {
rotate 2
daily
compress
dateext
dateyesterday
dateformat .%Y-%m-%d
postrotate
#/usr/sbin/invoke-rc.d syslog-ng reload >/dev/null
rsync -avH /var/log/mikrotik*.gz /backup/logs/mikrotik/
/usr/lib/rsyslog/rsyslog-rotate
endscript
}

每天创建mikrotik.log.YYYY-MM-DD.gz文件 问题是 postrotate 中的 rsync 不会复制最后一个文件。比如2021年9月25日,/var/log中有这样的文件:

-rw-r ----- 1 root adm 37837 Sep 24 23:49 mikrotik.log. 2021-09-24.gz
-rw-r ----- 1 root adm 36980 Sep 25 23:55 mikrotik.log. 2021-09-25.gz

和 /backup/logs/mikrotik/ 中只有:

-rw-r ----- 1 root adm 35495 Sep 23 00:00 mikrotik.log. 2021-09-22.gz
-rw-r ----- 1 root adm 36842 Sep 23 23:58 mikrotik.log. 2021-09-23.gz
-rw-r ----- 1 root adm 37837 Sep 24 23:49 mikrotik.log. 2021-09-24.gz

9 月 25 日没有文件 mikrotik.log.2021-09-25.gz 23:55 直到下一次轮换才会被复制。 如何使今天打包的文件被postrotate复制?

问题已解决。

这取决于执行操作的顺序。 Lgrotate 在压缩到 .gz 之前执行 'postrotate' 部分。 该问题的解决方案是将名称从 'postrotate' 更改为 'lastaction'。