问题现象:
使用批处理脚本从linux端(samba server) 备份一些数据,设置计划任务每天凌晨两点定时备份。
1)、windows系统中映射共享文件夹为S:盘,需要输入共享用户名和密码
2)、脚本中使用xcopy命令复制共享目录中的文件到windows本地目录中。
脚本如下:
set Name=%date:~0,4%%date:~5,2%%date:~8,2% chcp 65001 REM chcp防止中文乱码 mkdir "E:\脚本备份\bakscripts%Name%" xcopy /E "S\*" "E:\脚本备份\bakscripts%Name%\"
手工双击执行上述批处理文件没有问题,可以正常备份。
但是在计划任务中不行,脚本运行也设置了最高权限。把共享路径替换为本地路径就可以了,说明问题出现在共享路径中。
原因分析
在计划任务中执行该批处理文件并没有错误日志呈现,需要先改造脚本,后面把xcopy命令替换为功能强大的robocopy命令,可以方便的加上日志文件
set Name=%date:~0,4%%date:~5,2%%date:~8,2% chcp 65001 mkdir "E:\脚本备份\bakscripts%Name%" robocopy "\\192.168.30.11\share" "E:\脚本备份\bakscripts%Name%" /LOG+:"E:\脚本备份\bakscripts.log" /E /V /ETA /MIR /MT:8
改为上面的脚本之后,日志中看有如下错误:
ERROR 1326 (0x0000052E) Accessing Source Directory \\192.168.30.11\share\ The user name or password is incorrect.
原来是没有权限造成的,并且也说明了计划任务中执行脚本时使用的环境(密码缓存等)和当前登录用户(手工执行批处理的用户)并不一致。后面需要解决掉共享文件的用户和密码就可以了。
解决方案:
windows 中使用net use方法来创建个共享管道
最终可以在计划任务中成功执行的脚本如下:
set Name=%date:~0,4%%date:~5,2%%date:~8,2% chcp 65001 mkdir "E:\脚本备份\bakscripts%Name%" net use \\192.168.30.11\share "共享密码" /user:"共享用户名" robocopy "\\192.168.30.11\share" "E:\脚本备份\bakscripts%Name%" /LOG+:"E:\脚本备份\bakscripts.log" /E /V /ETA /MIR /MT:8