通过 cronjob 通过 Rsync 进行 Rsync

通过 cronjob 通过 Rsync 进行 Rsync

我有一个本地服务器,它是从 LAN 上的一些计算机进行 Rsync 的。它是备份解决方案的一部分。

该 Rsync 通过 cronjob 每天运行两次。有时,人们会添加大量数据,例如 TB 左右。当发生这种情况时,无法保证 Rsync 会在第二个 Rsync 启动之前完成。

在这种情况下会发生什么?
这是应该避免的事情吗?

答案1

如果我担心一个 cronjob 在另一个 cronjob 完成之前启动,我通常会在/tmp(如/tmp/lockFile_$$)下创建一个临时文件,该文件作为第一个 cronjob 中的最后一步被删除,然后让第二个 cronjob 以该文件存在的循环开始,在每个循环中休眠 5-10 秒,一旦文件消失就中断循环(可能每隔多次迭代就向 root 发送一封电子邮件,这样您就可以更容易地注意到停滞的作业)。

如果第一个的瓶颈是网络带宽,您可以尝试使用rsync--compress和选项。--compress-level

如果阻塞点是CPU,你可以尝试给rsync进程一个较低的nice值

如果iowait时机成熟,您可以考虑ionice在 Linux 上使用 cfq,或者将 rsync 命令拆分为多个并发进程,以便一个进程可以等待 I/O,而另一个进程可以进行传输,而不是串行进行。大多数平台还允许您调整 I/O 功能。在 Linux 上,在第一个 cronjob 期间,您可能会考虑暂时切换到deadline调度程序(以优先考虑读取而不是写入)并暂时增加 ,read_ahead_kb因为您要从磁盘提取整个大文件。

相关内容