"gcloud command not found" 当 运行 通过 crontab

"gcloud command not found" when run via crontab

所以我通过下载压缩包安装了google cloud sdk:

$ wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-225.0.0-linux-x86_64.tar.gz
$ tar -xvzf google-cloud-sdk-225.0.0-linux-x86_64.tar.gz

上面创建了包含相关文件的 google-cloud-sdk 目录,我 运行 install.sh 安装了 gcloud。

当我从 shell 访问 gcloud 时,它的行为符合预期。 但是当我尝试通过 crontab 访问它时,出现了标题中所述的错误。

为什么会这样?

P.S 我打算使用 gcloud 每 24 小时执行一次 firestore 备份。

编辑:
正如 Doug 所建议的,我通过其完整路径引用了 gcloud,并收到了以下内容:

    Traceback (most recent call last):
  File "/home/ec2-user/google-cloud-sdk/lib/gcloud.py", line 95, in <module>
    main()
  File "/home/ec2-user/google-cloud-sdk/lib/gcloud.py", line 54, in main
    from googlecloudsdk.core.util import encoding
  File "/home/ec2-user/google-cloud-sdk/lib/googlecloudsdk/core/util/encoding.py", line 202
    for k, v in six.iteritems(env)}
      ^
SyntaxError: invalid syntax

我已将 CLOUDSDK_PYTHON 设置为 /usr/bin/python2.7 (python 2.7.13) 仍然存在错误。但奇怪的是,当我直接通过 shell.

运行 命令时,不会发生此错误

答案: 好的,这是我不知道的 crontab 行为。它不访问环境变量集。更多信息在此 answer

将评论中的解决方案添加为社区 wiki 答案

Crontab 无法访问环境变量。通过将 gcloud 添加到用于 运行 的 PATH 环境变量,脚本可以解决此问题。此外,crontab 不会使用 shell 登录设置,建议更改 crontab 的条目:

path_to_script.sh >> path_to_log_file 2>&1

导出:

CLOUDSDK_PYTHON=/usr/bin/python2.7; path_to_script.sh >> path_to_log_file 2>&1

运行 gsuite 命令:

./google-cloud-sdk/bin/gcloud [command]

在我的例子中,使用 Ubuntu 20.04 的 Compute Engine,我在每个命令前面使用 gcloud 命令的完整路径,因为 cron 不能像建议的答案那样使用环境变量。 Ubuntu 20 的完整路径默认通过 snap 安装,位于:

/snap/bin/gcloud