GCP SDK gsutil rsynch不返回进度

Posted

技术标签:

【中文标题】GCP SDK gsutil rsynch不返回进度【英文标题】:GCP SDK gsutil rsynch not returning progress 【发布时间】:2018-11-17 20:17:13 【问题描述】:

当我从 GCP 控制台或 .bat 文件运行 gsutil rsynch 时,不显示完整的进度数据(我很确定以前它是这样的。)我在 403.0.0 版

命令如下:

>gsutil rsync -r -n \\xxxx\WEBSITE\xxx\pages gs://xxx/pages
 Building synchronization state...
 Starting synchronization...

>

如果我运行相同的命令,然后在 .bat 文件中运行 pause,则不会命中 pause - 批处理文件终止。 glist(也许是其他人)确实将他们的数据输出到控制台并继续平衡批处理命令。

c:
cd "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\bin\"
gsutil rsync -r -d \\xxx\pages gs://xxx/pages 
pause <<<<< never get here

如果我使用 .Net Process,我可以捕获包含进度数据的标准输出。然而,在 rsynch 完成后,StdOut 似乎关闭得很好。

这是一个错误吗?还是我错过了什么?

【问题讨论】:

【参考方案1】:

我建议您更新到latest gsutil release。 我在我的机器和Cloud Shell 上进行了测试,两者都使用 rsync 版本 4.31,它们显示命令的进度,列出正在复制的文件。

我在不同的环境中重现了该脚本,并观察到该脚本仅在 Windows 机器上完成 rsync 后会跳过命令。我在 Google Cloud SDK Shell 和 Cygwin for Windows 上进行了测试。

但是,在 Linux 机器和 Cloud Shell 上,相同的脚本按预期工作,并在 rsync 完成后执行后续命令。

此行为取决于各个 shell 的实现。您需要捕捉意外行为并以所需的方式处理情况,因为解决方案因环境而异。

【讨论】:

更新有帮助,当批处理文件运行时,我现在可以在控制台上看到一些 StdOut。我仍然遇到 rsynch 完成时批处理文件被中止的问题。 请贴出错误的日志输出,以便我检查。 日志?我应该发布控制台 StdOut 吗? 我认为我的问题是从 gsutil 中不正常地退出 rsynch。请尝试 OP 中的简单批处理文件。它会暂停吗? 我在批处理文件中复制了 gsutil 命令的简单脚本。正如您所提到的,命令窗口在执行第一个 gsutil 命令行后关闭,忽略下一个 gsutil 命令行和暂停。所以我可以确认我们观察到了相同的行为。我将检查 gsutil.cmd 文件以收集有关此行为的更多信息。我们可能还需要让 Google Cloud Storage 团队参与进来。

以上是关于GCP SDK gsutil rsynch不返回进度的主要内容,如果未能解决你的问题,请参考以下文章

使用 gsutil 从 GCP 同步到 S3

gsutil 将特定扩展文件上传到 gcp gcs

如何让 list_blob 表现得像 gsutil

如何确保 gsutil 复制不使用外部 Internet?

gsutil - 使用联合用户 AWS 密钥时 cp、rsync 的问题

通过 pip 安装的 Google Cloud SDK:“gsutil 需要 python 2.7”