1. 苏葳的备忘录首页
  2. 编程

从网上自动下载备份文件的批处理

ftp 脚本 批处理我的WordPress博客一直使用BackUpWordPress这个插件来做备份。然而前几天登录之后,发现某个日期之后没有产生新的备份文件。重启服务器之后才恢复正常,看来问题是出在服务器上。虽然麻烦些,回头有时间的话在操作系统级别上做个备份脚本,应该能减轻些对备份插件的依赖。目前更紧迫的工作是在自已工作用机上写个计划任务,定时从远端机拖下来备份文件,保存到本地。

可能有些FTP工具能做到自动定时下载文件,但用系统的FTP命令写批处理脚本来实现通用性会更好一些。本人工作用机是win7 64位版,系统自带的FTP命令一直工作不正常,原因是防火墙的配置有问题。以前没有关注,只在需要用FTP时关闭防火墙,用完后再打开。现在得认真解决一下这个问题了。

打开Win7系统防火墙查看规则,发现很有可能是专用网络与公用网络的问题。以前将FTP加入过防火墙的例外规则,但win7把多网卡系统分成专用和公用网络,公用网络受限更严格。FTP应用程序的例外规则有udp与tcp,以及公用和专用网络的区分。在公用网络规则中去掉对FTP应用的阻止后,FTP连接外网工作正常了。

然后是FTP脚本,FTP的-s参数能够指定一个命令文件,但由于我们需要动态产生需要获取的文件名,所以还是在批处理中用echo重定向先生成一个FTP命令文件,再用ftp -s执行它。批处理脚本如下:

rem 默认bin方式下载
@echo off
set ftpfilename=autodown.ftp
set ip=ftp.test.com
set user=username
set pass=userpass
set rmtdir=/www/backupdata
set localdir=c:\tmp
rem 设置当天日期为2015-03-21格式
set tmpdate=%date:~0,4%-%date:~5,2%-%date:~8,2%
set cmd=mget testdata-backup-complete-%tmpdate%*.zip
echo open %ip% >"%ftpfilename%"
echo user %user% %pass%>>"%ftpfilename%"
echo bin >>"%ftpfilename%"
echo hash >>"%ftpfilename%"
echo cd %rmtdir% >>"%ftpfilename%"
echo lcd %localdir% >>"%ftpfilename%"
echo %cmd% >>"%ftpfilename%"
echo y >>"%ftpfilename%"
echo bye >>"%ftpfilename%"
ftp -n -s:"%ftpfilename%"
del "%ftpfilename%"

可以看到,批处理中用date命令产生了当天的日期串。然后FTP登录成功之后,设为bin模式,开启hash显示,然后切换到正确目录,把备份文件下载到本地。

最后一步,就是配置个Windows的计划任务,定时执行FTP批处理,把文件取回本地。在计划任务中建立个基本任务,每天执行,时间设定为中午的1:30左右,此时本人机器一般处在开机状态。在设置时需注意的是,在执行程序的“开始位置”一项,要填入批处理文件所在的位置。比如填入绝对路径象“c:\tmp”之类,否则批处理可能无法正确执行。

在WordPress里,插件设为每天早晚各备份一次,这样在中午时执行这个定时任务,mget加文件通配符能取回唯一的备份文件。

原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/1971.html

发表评论

邮箱地址不会被公开。 必填项已用*标注