我在命令提示符下编写了一个命令,该命令提示符用于在删除它们之前使用psftp.exe连接到远程服务器并从中检索文件。当我在命令提示符下运行它时它完美地工作。当我尝试将其放入SQL代理作业的命令窗口然后运行作业时,它就会挂起。看看命令有什么可以导致这个?
我听说如果一个可执行文件显示提示然后它会导致这种行为,但当然psftp.exe没有,所以我不认为这是问题。
我正在我的本地用户下运行该作业,该用户也拥有完全的管理员权限。
我应该补充一点,作业中的命令会打开一个文本文件,以便读出psftp.exe的命令。我也为此包含了命令。
主要CmdExec命令:
W:\Software\psftp\psftp.exe -pw password1 -b W:\Software\psftp\Retrieval.txt -batch account@123.123.123.123
文本文件psftp.exe命令
cd out
lcd "C:\Documents and Settings\MyUser\My Documents\"
mget /out/*.txt
rm /out/*txt
quit
答案 0 :(得分:1)
这里的问题是双重的。首先是SQL代理作业在我们的生产服务器上的“服务”帐户下运行。这是我们服务器上用于运行服务等的单独用户帐户。虽然本身不是问题但是我将解释其中的根本原因。
当我第一次手动运行PSFTP.exe同时提出要求的解决方案时(读作管理器松散耦合的解释)我被要求在注册表中添加一个密钥。我没有注意到这一点,当我想要自动化这个过程时,它让我陷入困境。由于我在本地用户下运行大部分时通过命令行进行调试,我从来没有遇到任何问题。当我尝试将批处理文件等放入SQL代理作业时,我有效地更改了我正在运行的用户,因为我们始终使用“服务”用户帐户来执行此类作业。此用户当然不会为连接到外部sFTP服务器添加注册表项。
要解决此问题,我必须在单独的用户下手动运行PSFTP.exe程序(通过登录“服务”帐户下的计算机)并添加注册表项。执行此操作后,SQL代理作业成功运行。这么简单的事情,但它让我很头疼,因为我当然没有被提出任何例外或日志。
答案 1 :(得分:0)
这会像密码问题一样简单吗?你检查过事件日志了吗?你能在这里发布事件日志报告吗?