无法在SQL代理作业中运行CmdExec

时间:2012-12-17 12:24:23

标签: sql-agent-job

我在命令提示符下编写了一个命令,该命令提示符用于在删除它们之前使用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

2 个答案:

答案 0 :(得分:1)

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

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

要解决此问题,我必须在单独的用户下手动运行PSFTP.exe程序(通过登录“服务”帐户下的计算机)并添加注册表项。执行此操作后,SQL代理作业成功运行。这么简单的事情,但它让我很头疼,因为我当然没有被提出任何例外或日志。

答案 1 :(得分:0)

这会像密码问题一样简单吗?你检查过事件日志了吗?你能在这里发布事件日志报告吗?