SQL 服务器代理作业和 gsutil

SQL Server Agent Job and gsutil

我可以从 Windows 中的命令行成功 运行 使用 windows 域帐户的 gsutil 命令(设置服务帐户密钥等)。当我尝试使用 CmdExec 任务从 SQL 代理作业 运行 相同的命令时,该作业挂起且未完成。我看不到任何日志记录,所以不知道它在等待什么。我已经使用与手动 运行 gsutil 命令相同的代理用户将作业设置为 运行。

关于如何让它工作或如何查看更多日志记录的任何想法?

您使用的是独立的 gsutil 吗?或者您是在安装 Cloud SDK (gcloud) 的过程中获得它的吗?

如果作业长时间挂起,可能会卡住重试多次。要测试是否是这种情况,您可以将 num_retries 选项设置得非常小,但在您的 .boto 文件或通过此选项的命令参数中大于 0(例如 1):

gsutil -o 'Boto:num_retries=1' <rest of command here...>

第二件要注意的事情(至少对于 gcloud 不附带的 gsutil 版本而言)是 gsutil 默认在您的主目录中查找您的 boto 配置文件(指定它应该使用的凭据) .如果您 运行 gsutil 作为不同的用户(也许您的 SQL 代理作业作为其自己的专用用户运行?),它将在 中查找 .boto 文件that 用户的主目录。这同样适用于 gcloud 版本——gcloud 使用基于执行它的用户的凭据。您可以通过将 .boto 文件复制到作业有权读取的位置,并将 BOTO_CONFIG 环境变量设置为 运行 gsutil 之前的路径来避免这种情况。从 cmd shell,这看起来像:

set BOTO_CONFIG=C:\some\path\.boto && gsutil <rest of command here...>

注意:如果您不确定您通常使用哪个 boto 配置文件,您可以通过 运行 gsutil version -l 并查看显示您的配置路径的行(s ).