通过crontab运行时“找不到gcloud命令”

时间:2018-11-20 14:24:21

标签: linux firebase google-cloud-firestore gcloud

因此,我通过下载归档文件来安装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。

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

为什么会这样?

P.S我的意图是每24小时使用gcloud进行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),但错误仍然存​​在。但是奇怪的是,当我直接通过外壳运行命令时,不会发生此错误。

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

中的更多信息

3 个答案:

答案 0 :(得分:0)

从注释中添加解决方案作为社区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

答案 1 :(得分:0)

运行gsuite命令:

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

答案 2 :(得分:0)

在我的情况下,Compute Engine 和 Ubuntu 20.04,我在每个命令前面使用 gcloud 命令的完整路径,因为 cron 不能使用环境变量作为答案建议。默认情况下,Ubuntu 20 的完整路径是通过 snap 安装的,位于:

/snap/bin/gcloud