gpt4 book ai didi

ftp-client - 在 Windows 批处理脚本中检测 FTP 超时

转载 作者:行者123 更新时间:2023-12-04 04:58:14 25 4
gpt4 key购买 nike

我有一个计划每天运行的 SQL Server 代理作业。两个步骤中的第一步调用 SSIS 包,它将查询结果写入文件。第二步执行一个批处理文件,该文件重命名文件以包含日期,将文件上传到合作伙伴的 FTP 站点,将文件移动到存档目录并进行清理。这通常工作正常。

但是,有时不会发送作业成功完成的通知。当我登录到服务器时,我看到 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,如果这有助于找到解决方案。

最佳答案

我花了周末的时间寻找某种方法让 Windows FTP 客户端在连接失败时退出,但找不到任何东西。我很确定这是不可能的。取而代之的是,我安装了 WinSCP,它具有控制台模式并且可以编写脚本。它有一个重新连接时间选项,允许您指定进程在尝试重新连接之前将等待的秒数。在测试中,即使我多次从服务器端断开 FTP session ,作业也成功完成。永久断开连接导致程序以退出代码 1 退出,这足以让 SQL Server 代理检测到作业失败并相应地通知我们。

不过,WinSCP 在处理断开连接方面似乎并不一致。在某些试验中, session 的第二次断开连接导致程序以 1 退出,而在其他试验中,它在多次断开连接后重新连接。我将这些设置作为最大化重新连接和成功完成工作的可能性的设置:

option batch on
option reconnecttime 30
option confirm off

关于ftp-client - 在 Windows 批处理脚本中检测 FTP 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16487826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com