bash - 无法使用 gsutil cp 上传到 Google Cloud Service,且没有任何可见错误,如何调试?

标签 bash gsutil

我正在运行一个定制的解决方案来管理播客录制。一切都是通过 bash 脚本自动完成的,在某一时刻,我将节目上传到 GCS,为播客的 RSS 生成 XML,然后上传 RSS。这是我在 bash 脚本中运行的内容:

cd /path/to/tmp/files/
/path/to/gsutil cp -c -L /path/to/logs/gcloud_mp3.log *.mp3 gs://path/to/show/
wait
/path/to/gsutil -m acl set -R -a public-read gs://path/to/show/show.mp3
wait 

/path/to/php /path/to/rss_building_script.php

/path/to/gsutil cp -c *.xml gs://path/to/show/
wait
/path/to/gsutil -m acl set -R -a public-read gs://gs://path/to/show/rss.xml
wait

知道我的文件确实位于/path/to/tmp/files/,我可以看到它们。但有时,文件不会上传,并且运行脚本不会抛出任何错误。例如,昨晚,我录制了“show #1”。它录制、创建 mp3 文件、将 mp3 上传到 GCS、创建 XML、不上传 XML。我见过一些两个文件都无法上传的情况。

问题是,没有显示错误。就昨晚的节目 #1 而言,我得到的是

  • 将 mp3 文件复制到 GCS;
  • 为 mp3 文件设置 ACL;
  • 为 xml 文件设置 ACL;
  • 错误,XML 文件不存在。

在应该上传 XML 文件的地方,什么也没有发生。没有错误。根本不值一提。我该如何调试这个?

最佳答案

当程序像这样默默失败时,我通常会求助于 strace 。例如这样的命令:

strace gsutil cp -c -L/path/to/logs/gcloud_mp3.log *.mp3 gs://path/to/show/2>&1 |三通/tmp/strace.gsutil

将产生大量产出。接近尾声时,当程序因错误而崩溃时,可能会出现一些系统调用来提示您出了什么问题。特别寻找E errno constants ,如ENOENT(没有这样的文件或目录)

欲了解更多介绍,this article has some good examples and patterns .

当然,这个特定的错误可能是上游的计时问题,这对您来说根本没有任何意义。 strace 输出可能提供一些诊断信息(超时?),也可能不提供。在这种情况下,我会检查“奇怪”的情况,例如 UTF 问题、文件大小限制、并行问题、连接性等。

关于bash - 无法使用 gsutil cp 上传到 Google Cloud Service,且没有任何可见错误,如何调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24804744/

相关文章:

json - 使用 jq 对 JSON 中特定字段的值求平均值

arrays - 检查元素是否存在于 Bash 数组中

linux - bash echo stars or hashes 基于特定的数字

google-bigquery - 从基于用户的配置文件更新

google-compute-engine - 为什么 gsutil -m cp -R 比 gsutil cp -R 快得多

php - 错误 : Unterminated quoted string during PHP exec

bash的实现中找不到函数的定义

authentication - 如何授权root运行gsutil?

google-cloud-storage - gsutil cp 命令复制整个目录路径(在 Windows 上) - 错误?

google-cloud-storage - 如何将本地文件夹与存储桶中的文件夹进行比较?