首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在备份日志文件被其他日志文件覆盖之前获取备份日志文件?

如何在备份日志文件被其他日志文件覆盖之前获取备份日志文件?
EN

Stack Overflow用户
提问于 2020-07-02 14:41:55
回答 2查看 657关注 0票数 0

我有两个日志文件: abc.log和abc.log_old。当abc.log已满时,它将覆盖到abc.log_old文件中。但我不确定什么时候会满,日志文件的大小也没有固定。日志文件来自不同的系统。

我的要求是在abc.log_old文件被abc.log文件覆盖之前,先备份它。如何在备份日志文件被其他日志文件覆盖之前获取它?

EN

回答 2

Stack Overflow用户

发布于 2020-07-02 15:07:53

别再发明轮子了。这是logrotate的工作。

票数 4
EN

Stack Overflow用户

发布于 2020-07-02 18:02:36

如果覆盖abc.log_old的应用程序是支持它的应用程序,情况会好得多。这是系统通常的设置方式。具体来说,

如果是重设abc.log_old.

  • Rename的时间,则
  1. 备份abc.log abc.logabc.log_old.
  2. Restart,该服务正在写入abc.log,以确保当前称为abc.log_old的文件的所有文件句柄都是closed.

或者在无法重命名打开的文件(例如Windows)的系统上:

如果是重设abc.log.

  • Backup abc.log_old.

  • Rename的时间,那么
  1. 就停止写到abc.log.

abc.log的服务到abc.log_old.

  • Restart,停止写到abc.log.

的服务

这就是logrotate背后的想法。

但是,听起来您希望由一个独立于覆盖abc.log_old的系统来执行备份。

比如说,abc.log从不需要少于T秒的时间就能吃饱。每隔T/3秒运行一个脚本,执行以下操作:

如果abc.log_old.

  • If存在
  1. ,则
    1. 备份成功,
      1. 删除abc.log_old

如果存在abc.log_old.

  • If,则为
  1. ,如果其修改时间或大小与上一次记录的数字不同,则为
    1. 备份abc.log_old成功,
      1. 记录abc.log_old的修改时间和size.

通过使用T/3秒的时间,至少会有两次尝试在文件被覆盖之前备份它(允许其中一次尝试没有问题地失败)。使用小于T/(N+1)的周期来保证N次尝试。

上述假设假设备份所需的时间少于时间段。这也意味着重复的备份失败将导致数据丢失。这两个问题都可以通过以下方式加以解决:

如果存在

  1. abc.log_old,则

代码语言:javascript
复制
1. If there are any files in a directory set aside to be the queue directory,
代码语言:javascript
复制
    1. Get the number of the highest numbered file in that directory.
代码语言:javascript
复制
1. Else,
代码语言:javascript
复制
    1. Consider the highest numbered file to be `0`.
代码语言:javascript
复制
1. Rename `abc.log_old` such that:
代码语言:javascript
复制
    - It will be moved into the queue directory.
    - It's file name ends with a number one higher than the previously obtained number.

  1. 获取队列目录中的文件列表.

numerically.

  1. 对它们进行排序

列表中每个文件的

代码语言:javascript
复制
1. Backup the file.
2. If the backup was successful, 
    1. Delete `abc.log_old`.
代码语言:javascript
复制
1. Else, 
    1. Exit.
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62698936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档