首页 > 解决方案 > 每 5 小时更新一次 crontab 以 tar 新的/更新的文件

问题描述

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

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

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

这是到目前为止的样子(更新为包括部分答案):

  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?

标签: ubuntucron

解决方案


使用带符号的数字作为参数。300 表示恰好在300 分钟前修改。-300不到300 分钟前。+300 将是300多分钟前。

更新 1

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

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

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

更新 2

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

另外,请注意,这不是压缩的tar文件。如果不取消/重新压缩,您将无法更新压缩的tar文件。这就是为什么您不能将-z-ur选项结合起来的原因。


推荐阅读