2013-05-10 223 views
2

检测FTP超时我有安排每天运行一个SQL Server代理作业。两个步骤中的第一步调用一个SSIS包,它将查询的结果写入文件。第二步执行其重命名文件,包括日期批处理文件,将文件上传到合作伙伴的FTP站点,将文件移动到归档目录和清理。这通常工作正常。在Windows批处理脚本

然而,有时候,没有通知发送作业成功完成。当我登录到服务器时,发现ftp.exe仍在运行,但该文件尚未上传,也未移至存档。当我终止FTP进程时,作业继续,移动文件并清理。看看工作经历揭示了这些失败案例中的两种不同情况。首先,在建立连接,但看到最后一个FTP输出为150 Opening data channel for file transfer.零钱,没有226 Transfer OK因为有一个成功的作业运行。第二种情况是连接永远不会建立,所以脚本会关闭,并在没有连接打开时尝试登录。

这里是主机,用户脚本,并通过被改写的:

@echo off 
setlocal 

D: 
cd D:\Backups 

set file_name=ssis_output.txt 
set new_file_name=SDCL.%date:~-4,4%-%date:~-10,2%-%date:~-7,2%-00-00-00.txt 

set user=XXXXXXXXXXXXX 
set pass=XXXXXXXXXXXXX 
set host=XXXXXXXXXXXXX 

ren "%file_name%" "%new_file_name%" 

echo user %user%> ftpcmd.dat 
echo %pass%>> ftpcmd.dat 
echo bin>> ftpcmd.dat 
echo put %new_file_name%>> ftpcmd.dat 
echo close>> ftpcmd.dat 
echo bye>> ftpcmd.dat 
ftp -n -s:ftpcmd.dat %host% 
del ftpcmd.dat 
move %new_file_name% data_files 

我想什么做的是找到一种方法,包括在批处理文件中的一些错误检测,因此如果FTP连接要么在传输完成之前未建立或超时,脚本会识别并失败,从而允许作业失败并发送相应的通知。更好的是,连接失败会导致在适当的停顿之后再次尝试几次,然后才放弃并报告失败。

编辑:我不反对安装一个不同的免费软件FTP客户端,如WinSCP,如果这将有助于达成解决方案。

回答

2

我度过了周末,铸造关于某种方式获得Windows FTP客户端在连接失败的退出,但未能发现任何东西。我很确定这是不可能的。取而代之的是,我安装了WinSCP,它具有控制台模式并且体积很小。它有一个reconnecttime选项,允许您指定进程在尝试重新连接之前等待的秒数。在测试中,即使我多次断开FTP会话与服务器端的连接,作业也已成功完成。永久断开连接导致程序以退出代码1退出,这足以让SQL Server代理检测到作业失败并相应地通知我们。

的WinSCP似乎并不一致,但是,在处理断开的。在某些试验中,第二次断开会话会导致程序退出1,而在另一些试验中,会在多次断开连接后重新连接。我登陆了这些设置的那些最大化重新连接和成功完成任务的概率:

option batch on 
option reconnecttime 30 
option confirm off 
0

可能有点晚了OP。但是为了记录FTP,每次上传文件时,都可以让它向日志文件写入确认。然后在脚本完成后,让它检查日志文件以查看传输是否成功完成。如果没有,请从最后一个已知传输文件中恢复。尽管批处理脚本可能是一个相当麻烦的循环。