场景:我需要创建一个cron作业,扫描目录并将每个文件sftps到另一台机器
创建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整个目录
答案 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 *