使用xcopy实现文件的自动同步并输出日志

      目前有这样一个需求,windows的服务器,有一个目录用来存放文件,该目录下的文件时刻都在不停的增长,为了实现高可靠性,要求对目录进行时效性高的备份,之前的项目中有做过使用cwRsync进行目录同步的,不过其性能实在不够理想,一个几十个G的目录每执行一次同步检测需要半个小时到一个小时的时间,这样就无法实现高密度的文件差异检查并实现时时同步,在寻找的过程中发现了一个比较好用的东东xcopy,其检查速度非常快,文件同步检测速度大约为每分钟6G,效率实现方式比cwRsync高出不少

其实现方式很简单,backup.bat文件内容如下
net use \\192.168.1.100\backup\teset   sharepassword /user:mytestdc\backup
xcopy E:\test \\192.168.1.100\backup\teset /d/s/e/y
net use \\192.168.1.100\backup\teset /delete

本来这样就完成了
但是做的过程中还是要对比小效率很功能撒,这样做的效率是提高了,但是cwRsync的一个很有用的功能同步日志这里却实现不了,怎么办呢?用重定向符号将其执行过程输出到文本文件记录不就可以了吗?但是xcopy的过程不会将每个文件的记录下来,经过一番探索,找到了用bat文件调用bat文件的方式将执行的过程输出。并在日志中记录每次执行的时间等信息,挺完美的了。具体脚本如下:
before.bat内容:
set date = date /T
echo .  >> D:\Service\backup\log\%date%.log
echo .  >> D:\Service\backup\log\%date%.log
echo .  >> D:\Service\backup\log\%date%.log
echo .  >> D:\Service\backup\log\%date%.log
echo .  >> D:\Service\backup\log\%date%.log
echo .  >> D:\Service\backup\log\%date%.log
echo .  >> D:\Service\backup\log\%date%.log
echo .  >> D:\Service\backup\log\%date%.log
echo .  >> D:\Service\backup\log\%date%.log
echo .  >> D:\Service\backup\log\%date%.log
echo ==========================================================================================>> D:\Service\backup\log\%date%.log
echo %date% %time% >> D:\Service\backup\log\%date%.log
backup.bat >> D:\Service\backup\log\%date%.log
这里每天以日期为文件名记录日志,所以用到一个变量,为了方便查看,在每次执行前先在日志中输入多行空行,以及一个以多个等号组成的分割符,输出执行的日期与时间后就可以执行同步脚本了,将同步脚本执行的所有过程全部用重定向符号输出到日志。
看了日志后又找到了一个需要完善的地方,备份脚本中的共享用户名和密码信息都被输出到日志了,存在安全隐患,将backup.bat修改如下。
echo off
net use \\192.168.1.100\backup\teset   sharepassword /user:mytestdc\backup
echo on
xcopy E:\test \\192.168.1.100\backup\teset /d/s/e/y
echo off
net use \\192.168.1.100\backup\teset /delete

OK,这样比较完美了~~~~手动执行过程正常。
直接将before.bat添加了2008系统的佳话任务中,计划每间隔半个小时执行一次,但是执行时发现计划任务的状态为 0x1,并非正常完成,备份日志日志中也没有backup.bat的执行过程,微软计划任务错误信息说明如下:
代码   0   或   0x0:   操作成功完成。      
代码   1   或   0x1:   调用的函数不正确或调用了未知函数。    
代码   10   或   0xa:   环境不正确。    
代码   0x8009000f:常规访问被拒绝    
猜测其将backup.bat作为一个函数调用了,但是该函数并没有在系统环境变量中指定的路径中,所以错误吧,于是在该文件其加上完整的路径,即将原来before.bat中的行
backup.bat >> D:\Service\backup\log\%date%.log
修改为
D:\Service\backup\backup.bat >> D:\Service\backup\log\%date%.log
再执行尝试OK
终于完美地完成了~~~ 敲字还真是累~~~~

2010.03.29补充,在做2008系统另外一个计划任务也是bat文件,发现任务执行成功,但是实际bat文件要实现的目的未达到,发现日志信息如下:
任务计划程序已成功完成任务“\mytime”、实例“{508f189a-d5a4-4b8e-9139-c896af7a82c9}”、操作“C:\Windows\SYSTEM32\cmd.exe”,返回代码 2。
后发现该bat中有调用其他资源,而默认情况下对该资源没有访问权限,修改配置好!

[本日志由 happyboy 于 2010-03-29 09:12 AM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: windows下的程序相关 windows学习笔记
相关日志:
评论: 0 | 引用: 0 | 查看次数: 484
发表评论
你没有权限发表评论!