我可以SSH
在两个服务器A
(httpmydocs)之间进行访问,并且我正在使用命令行B
定期传输数据:A
B
scp -rpC /var/www/httpmydocs/* mega_me@mega_debian.com:/var/www/httpmydocs
现在我想每周将数据从台式电脑备份到服务器A
。您如何帮助我修改此命令行,使其成为在特定时间和日期自动运行的脚本,以将数据从我的台式电脑备份到服务器A
答案1
scp
我不会使用rsync
此任务,甚至可能使用rdiff-backup
.
$ rsync -avz /var/www/httpmydocs/ \
mega_me@mega_debian.com:/var/www/httpmydocs/.
这将执行与该命令类似的备份scp
,但它只会传输文件随时间变化的增量或新文件,跳过已复制的文件。
根据您的意图,您可以使用该--delete
开关从远程备份中删除本地不再存在的文件。
为了使它成为一个计划任务,我将其放入一个 cronjob 中。鉴于它是 system-y 类型的目录,我会在/etc/cron.daily
或下添加一个 crontab 条目/etc/cron.weekly
,具体取决于您的频率。将上述rsync
命令放入 shell 脚本中,使其可执行,并放在其中任一目录中,就可以使其以这 2 个频率之一发生。
参考
答案2
如果您绝对需要特定的时间和日期,您应该使用 cron 作业。当您通常从命令行运行它时,这可以是一项普通的 cron 作业,而不必是系统作业。crontab -e
将为您提供一个要编辑的文件,您可以在底部的某个位置添加该文件
10 2 * * 1 test -x /path/to/yourscript || /path/to/yourscript
第一个字段是分钟,第二个字段是小时,第五个字段是星期几。
该文件/path/to/yourscript
应该是可执行的 ( chmod +x
) 并且如下所示:
#!/bin/bash
scp -rpC /var/www/httpmydocs/* mega_me@mega_debian.com:/var/www/httpmydocs
这将满足您的要求,但有几个问题:
- 如果您的机器在周一凌晨 2:10 停机,它就不会启动。
scp
每次都会进行完整复制。
对于第2点,slm已经给出了适当的解决方案。
yourscript
第 1 点可以通过不使用 crontab 并输入来解决(正如 slm 也指出的那样),但是您在某种程度上失去了对运行时间的控制,因为每周运行都是在(或)/etc/cron.weekly
中指定的时间依次完成的。您可以在那里更改时间和星期几,但这也会影响正在运行的其他脚本。/etc/crontab
/etc/anacrontab
如果使用/etc/cron.weekly
不可接受,您可以调整该方法我的回答在这里每周至少运行一次并在特定时间之后运行。