我正在运行一个定制的解决方案来管理播客录制。一切都是通过 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/