Cron作业到目录中的SFTP文件

时间:2013-08-09 20:20:28

标签: crontab sftp

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

  • bash脚本:/home/user/sendFiles.sh
  • cron interval: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整个目录

3 个答案:

答案 0 :(得分:1)

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

在这种情况下,我会使用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

答案 1 :(得分:0)

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

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

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

您可能也对进行双向同步的unison感兴趣

答案 2 :(得分: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 *