2012-12-17 43 views
1

我有一个命令,我在命令提示符下编写了一个命令,该命令旨在使用psftp.exe连接到远程服务器,并在删除它之前从中检索文件。当我在命令提示符下运行它时,它完美地工作。当我尝试将其放入SQL代理作业的命令窗口中,然后运行该作业时,它就会挂起。看看这个命令是否有什么会导致这种情况?无法在SQL代理作业中运行CmdExec

我听说如果一个可执行文件显示提示,那么它会导致这种行为,但当然psftp.exe不会,所以我不认为这是问题。

我正在我的本地用户下运行这项工作,该用户也拥有完整的管理权限。

我应该添加该作业中的命令将打开一个文本文件,以便读出psftp.exe的命令。我也包含了这个命令。

主要的CmdExec命令:

W:\Software\psftp\psftp.exe -pw password1 -b W:\Software\psftp\Retrieval.txt -batch [email protected] 

文本文件psftp.exe命令

cd out 
lcd "C:\Documents and Settings\MyUser\My Documents\" 
mget /out/*.txt 
rm /out/*txt 
quit 

回答

1

这里的问题是双重的。首先是SQL代理作业在我们的生产服务器上的“服务”帐户下运行。这是我们的服务器上的一个单独的用户帐户,用于运行服务等。虽然这本身并不是一个问题,但这是我将解释的根本原因。

当我第一次运行PSFTP.exe的时候,想出一个解决方案的要求(阅读经理松散耦合的解释)我被要求添加一个注册表项。我没有注意到这一点,当我想要自动化该过程时,它在后面咬了我一口。由于我在本地用户的大部分时间在通过命令行进行调试时运行,所以我从来没有遇到任何问题。当我尝试将批处理文件等放入SQL代理作业中时,我有效地更改了我正在运行的用户,因为我们总是使用我们的“服务”用户帐户执行此类作业。这个用户当然不会添加用于连接到外部sFTP服务器的注册表项。

要解决这个问题,我不得不在单独的用户在手动运行PSFTP.exe程序(通过登录到“服务”帐户下的计算机),并添加注册表项。完成此操作后,SQL Agent作业成功运行。这是一件简单的事情,但它让我感到非常头痛,因为我当时并没有得到任何例外或日志。

0

难道是简单的东西像密码问题?你检查过事件日志吗?你能在这里发布事件日志报告吗?

+0

嗨。该脚本在命令提示符下正常工作,所以绝对不会出现密码问题。日志没有显示任何感兴趣的东西,因为没有任何反应。当我尝试运行它时,我必须停止工作,因为它只是挂起。 – CSharpened

+0

谷歌的另一个想法可能是工作中的多重线?尝试将命令放在.cmd文件中并让作业执行该命令。 – Paul

+0

我已经重新格式化了我原来的问题,因为我不确定你的意思。原来的命令全是一行。第二组命令已在文本文件中,并由PSFTP.exe读出 – CSharpened