1

场景:我需要创建一个 cron 作业来扫描目录并将每个文件 sftps 到另一台机器

  • bash 脚本:/home/user/sendFiles.sh
  • cron 间隔:1 分钟
  • 目录:/home/user/myfiles
  • sftp 目的地:10.10.10.123

创建 cron 作业

crontab -u user 1 * * * /home/user/sendFiles.sh

创建脚本

#!/bin/bash
/usr/bin/scp -r user@10.10.10.123:/home/user/myfiles .
#REMOVE FILES AFTER ALL HAVE BEEN SENT
rm -rf * 

问题:不确定该 cron 选项卡是否正确或如何使用 cron 选项卡 sftp 整个目录

4

3 回答 3

3

如果要在 cronjob 上执行,我假设它是为了同步目录。

在这种情况下,我会使用rdiff-backup进行增量备份。这样,只有改变的东西才会被转移。

该系统将使用 ssh 来传输数据,但使用rdiff-backup而不是普通的scp. 这样做的主要好处是速度;仅传输已更改的部分会更快。

这是使用 rdiff-backup 通过 ssh 进行复制的命令:

rdiff-backup /some/local-dir hostname.net::/whatever/remote-dir

将其添加到 cronjob,确保执行 rdiff 备份的用户具有 ssh 密钥,因此不需要密码。

关于 ssh 密钥:在此处阅读有关 ssh 密钥的信息:http ://www.linuxproblem.org/art_9.html设置好后,尝试执行常规 ssh 以查看是否可以在没有密码的情况下登录。)

像这样的东西:

* * * * * rdiff-backup /some/local-dir hostname.net::/whatever/remote-dir

将每分钟复制一次。(您的示例将在每小时的第一1 * * * *分钟执行一次;也就是说,每小时一次,而不是每分钟一次)

请记住,如果传输量很大并且尚未完成传输,则可能会导致问题。但我想你想要的是传输不太大的文件。或者说你的网速很大。否则,将其更改为每 5 分钟进行一次传输,*/5 * * * *改为使用。

最后,在此处阅读有关 rdiff-backup 的更多信息:http ://www.nongnu.org/rdiff-backup/examples.html

于 2013-08-27T04:15:34.223 回答
1

rdiff-backup 是个不错的选择,还有rsync

rsync -az user@10.10.10.123:/home/user/myfiles .

我注意到您也在删除文件,这仅仅是因为您不想重新复制它们吗?rsync 只会复制更新的文件。

您可能还对进行双向同步的一致感兴趣

于 2013-08-28T10:50:59.410 回答
0

这些都是很好的答案;如果你坚持,scp你可能想对你的脚本做些小改动:

#!/bin/bash
/usr/bin/scp -r user@10.10.10.123:/home/user/myfiles .
#REMOVE FILES AFTER ALL HAVE BEEN SENT
cd /home/user/myfiles   # make sure you're in the right directory before rm
rm -rf * 
于 2013-08-28T15:30:06.300 回答