【问题标题】:Update a crontab to tar new/updated files every 5 hours每 5 小时更新一次 crontab 以 tar 新的/更新的文件
【发布时间】:2020-12-02 12:46:52
【问题描述】:

我正在尝试为 crontab 创建一个命令来压缩每个新/更新的文件(从 cron 上次运行时开始)。 cron 必须每 5 小时运行一次。

  1. 我要备份文件夹/home/swayraines中包含的所有文件,包括其子文件夹
  2. 我想用这些文件在这里保存一个 tar folder/backup/back.tar
  3. crontab 必须每 5 小时运行一次
  4. 只有自上次执行 cron 以来添加或编辑过的文件才需要添加到存档中。因此,除非它是新的/编辑过的,否则不应保存。
  5. 我想将结果保存在包含 stdout 和 stderr 的日志中 folder/backup/backlog.log

所以我认为最好的方法是 find 在过去 5 小时内添加/编辑的文件,然后 tar 这些文件,然后在 .log 中输出 stdout 和 stderr 但它不起作用,我'我不确定出了什么问题。

这是目前的样子(已更新以包含部分答案):

  0 */5 * * * find /home/swayraines -mmin -300 -exec tar -zcvf folder/backup/back.tar {} > /folder/backup/backlog.log 2>&1 \;

更新 问题是现在每次运行 crontab 时它都会创建一个新的 tar 存档,并且存档只包含最新添加的文件。

更新 2 为了清楚起见,我一开始说我想每 5 小时创建一个新存档,但我想更新存档并仅附加新文件。所以我相信我需要将tar命令更改为-uvf

【问题讨论】:

  • 您当前的计划将每 5 小时运行一次,直到 20:00,然后在 4 小时后运行下一次。如果你真的想每 5 小时执行一次,你需要一个更详细的时间表。但如果保持稳定很重要,也许每 4 小时或每 6 小时运行一次会更简单。
  • 这是个好建议。会考虑到这一点。

标签: ubuntu cron


【解决方案1】:

使用有符号 数字作为参数。 300 表示 恰好 300 分钟前修改。 -300 比 300 分钟前。 +300 将比 300 分钟前更多

更新 1

-exec 的参数必须以 \; 结尾,如下所示:

 0 */5 * * * find /home/swayraines -mmin -300 -exec tar -zcvf folder/backup/back.tar {} > /folder/backup/backlog.log 2>&1 \;

这将毫无问题地运行,但是当它一次对 1 个文件执行命令时,您最终只会将它操作的最后一个文件压缩到 tar 文件中。建议你编写命令将文件复制到临时目录,压缩临时目录,然后删除临时目录。

更新 2

正确。如果要将更改的文件附加到 tar 文件的末尾,可以使用 -r --append-u --update,但必须先创建 tar 文件。如果文件不存在,它将不会创建该文件。需要注意的是,这些命令不会覆盖之前的版本,因此如果您不需要两个版本,您应该先使用--delete,然后再追加新版本。

另外,请注意,这不是压缩的 tar 文件。您无法在不解压缩/重新压缩的情况下更新压缩的 tar 文件。这就是为什么您不能将-z-ur 选项结合使用。

【讨论】:

  • 哎呀,这是正确的。我已经更改了 -mmin 的值,但它仍然无法正常工作。这只是我多次更改命令后的错误!
  • 很好的捕获(再次)虽然它确实充分定义了我想要寻找多远,但它仍然不起作用。我尝试将该命令用作简单的命令行,但 tar 不起作用。
  • 我很抱歉在回答之前没有检查完整的情况。我刚刚分享了最引人注目的第一件事。答案已更新为完整的解决方案。由于您已经很接近了,我假设您可以处理我最终建议的命令。
  • 谢谢,这真的很有帮助,我学到了很多东西!
  • 更新了您问题第 3 部分的答案。
猜你喜欢
  • 2022-07-05
  • 1970-01-01
  • 2019-01-11
  • 2015-06-22
  • 2020-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多