日志备份与日志轮换冲突

在我的服务器上,我有日志轮转和备份脚本,除了所有备份脚本,备份整个日志目录。

对于日志轮换,我在Linux上使用logroatate ,在BSD上使用newsyslog 。 对于日志备份,我只需简单地使用cp -Rf /var/log/ /backups/

在备份运行期间,当日志轮转重命名日志文件时,备份脚本不时会因竞争情况而失败。 所以我得到这样的东西:

cp:/var/log/messages.0:没有这样的文件或目录

我相信我的情况并不是独一无二的。 有没有最好的做法来克服这种竞争条件,并使备份更可靠?

它看起来不像logrotate提供的任何东西,你可以挂钩(例如一个PID文件)来解决这个问题,所以你需要解决它。

我会考虑使用可用于Linux和BSD的flock(1) 。

您可以让logrotate脚本创build一个锁,然后让备份脚本检查并等待锁。