可能有些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