为什么 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'。
我在 /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'。