google-cloud-storage - 如何从 crontab 正确运行 gsutil?

标签 google-cloud-storage gsutil

这是我在/etc/crontab 中的条目,CentOS 6.6:

0 0 */1 * * fredrik /home/fredrik/google-cloud-sdk/bin/gsutil -d -m rsync -r -C [src] [dst] &> [log]

我收到此错误:OSError:[Errno 13]权限被拒绝:'/.config'

如果在 shell 中执行,该命令运行良好。我注意到如果没有 gsutil 的完整路径,我无法运行 0 0 */1 * * fredrik gsutil ... ,所以我假设我在 cron 所在的环境中丢失了一些东西正在运行...?

这是完整的回溯:

Traceback (most recent call last):
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/gsutil.py", line 68, in <module>
    bootstrapping.PrerunChecks(can_be_gce=True)
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/bootstrapping.py", line 279, in PrerunChecks
    CheckCredOrExit(can_be_gce=can_be_gce)
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/bootstrapping.py", line 167, in CheckCredOrExit
    cred = c_store.Load()
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/../../lib/googlecloudsdk/core/credentials/store.py", line 195, in Load
    account = properties.VALUES.core.account.Get()
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/../../lib/googlecloudsdk/core/properties.py", line 393, in Get
    return _GetProperty(self, _PropertiesFile.Load(), required)
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/../../lib/googlecloudsdk/core/properties.py", line 618, in _GetProperty
    value = callback()
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/../../lib/googlecloudsdk/core/properties.py", line 286, in <lambda>
    'account', callbacks=[lambda: c_gce.Metadata().DefaultAccount()])
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/../../lib/googlecloudsdk/core/credentials/gce.py", line 179, in Metadata
    _metadata_lock.lock(function=_CreateMetadata, argument=None)
  File "/usr/lib64/python2.6/mutex.py", line 44, in lock
    function(argument)
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/../../lib/googlecloudsdk/core/credentials/gce.py", line 178, in _CreateMetadata
    _metadata = _GCEMetadata()
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/../../lib/googlecloudsdk/core/credentials/gce.py", line 73, in __init__
    _CacheIsOnGCE(self.connected)
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/../../lib/googlecloudsdk/core/credentials/gce.py", line 186, in _CacheIsOnGCE
    config.Paths().GCECachePath()) as gcecache_file:
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/../../lib/googlecloudsdk/core/util/files.py", line 465, in OpenForWritingPrivate
    MakeDir(full_parent_dir_path, mode=0700)
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/../../lib/googlecloudsdk/core/util/files.py", line 44, in MakeDir
    os.makedirs(path, mode=mode)
  File "/usr/lib64/python2.6/os.py", line 150, in makedirs
    makedirs(head, mode)
  File "/usr/lib64/python2.6/os.py", line 157, in makedirs
    mkdir(name, mode)
OSError: [Errno 13] Permission denied: '/.config'

最佳答案

感谢 Mike 和 jterrace 帮助我完成这项工作。最后,我不得不修改这些环境变量:PATH、HOME、BOTO_CONFIG(除了任何其他默认变量)。

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/home/fredrik/google-cloud-sdk/bin
HOME=/home/fredrik
BOTO_CONFIG="/home/fredrik/.config/gcloud/legacy_credentials/[your-email-address]/.boto"

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

  0  0 */1 *  * fredrik   gsutil -d -m rsync -r -C /local-folder/ gs://my-bucket/my-folder/ > /logs/gsutil.log 2>&1

> gsutil.log 2>&1 将 stdout 和 stderr 通过管道传输到同一文件。此外,下次 gsutil 运行时它将覆盖日志文件。为了将其追加到日志文件中,请使用 >> gsutil.log 2>&1。这在 Linux 和 OS X 上应该都是安全的。

我注意到调试标志 -d 会在大量数据上创建大量日志文件,因此我个人可能会选择退出该标志。

关于google-cloud-storage - 如何从 crontab 正确运行 gsutil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27439326/

相关文章:

Python GCS 如何重命名内部 zip 文件中的文件?

go - 如何将文件上传到 Google Cloud Storage Bucket 子目录

wordpress - 谷歌云和 wordpress

google-cloud-platform - 权限被拒绝的 gsutil cp 错误

google-bigquery - BigQuery - 将查询结果导出到本地文件/Google 存储

google-app-engine - 单元测试 Google 的 Cloud Storage API

amazon-s3 - gsutil cp -Rn s3 ://foo gs://bar is slow and consuming a lot more ingress than egress

crontab gsutil 命令执行但没有输出

google-cloud-storage - 在生产传输中使用 gsutil 或 google 云存储 API 有什么优势吗?

authentication - 将 gsutil 与谷歌驱动器(不是谷歌云存储)一起使用