2013-05-10 221 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,每次上傳文件時,都可以讓它向日志文件寫入確認。然後在腳本完成後,讓它檢查日誌文件以查看傳輸是否成功完成。如果沒有,請從最後一個已知傳輸文件中恢復。儘管批處理腳本可能是一個相當麻煩的循環。