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

时间:2014-07-17 13:20:36

标签: 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;
  • 将ACL设置为mp3文件;
  • 将ACL设置为xml文件;
  • 错误,XML文件不存在。

如果应该上传XML文件,则不会发生任何事情。没错。根本不值一提。我该怎么调试呢?

2 个答案:

答案 0 :(得分:1)

如果程序像这样无声地失败,我通常会转向strace。像这样的命令,例如:

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

将产生大量的产出。非常接近结束,当程序在其错误下崩溃时,可能会有一些系统调用可以提供有关错误的提示。请特别注意E errno constants,例如ENOENT (No such file or directory)

有关进一步的介绍,this article has some good examples and patterns

当然,这个特殊的错误可能是一个时间问题上游,这意味着你身边什么都没有。 strace输出可能会提供一些诊断(超时?),也可能不提供。在这种情况下,我会检查“奇怪”的情况,如UTF问题,文件大小限制,并行问题,连接性等。

答案 1 :(得分:1)

每次运行脚本时都会出现此问题吗?您可能会遇到列表操作的最终一致性(在运行递归操作或涉及通配符的操作时隐式执行)的问题。

要避免此问题,您可以做的一件事是在您执行上传时设置ACL(这可能是因为您使用的是固定ACL而不是自定义ACL)。例如:

/ path / to / gsutil cp -a public-read -c -L /path/to/logs/gcloud_mp3.log * .mp3 gs:// path / to / show /

因此您不需要运行gsutil acl set命令,因此列出最终一致性并不重要。

相关问题