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

v64noz0r  于 2023-05-16  发布在  Linux
关注(0)|答案(4)|浏览(242)

所以我通过下载存档安装了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访问它时,我得到了标题中所说的错误。
为什么会这样呢??
我的意图是使用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

rqqzpn5f

rqqzpn5f1#

运行gsuite命令:

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

hc8w905p2#

  • 从评论中添加解决方案作为社区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
o8x7eapl

o8x7eapl3#

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

/snap/bin/gcloud
2eafrhcq

2eafrhcq4#

除了这些解决方案之外,如果您有很多cron作业运行带有GCP命令(例如gcloud或gsutil)的脚本,这些命令不包含绝对路径,那么一个快速解决方案是获取系统环境路径。把它放在你的脚本的顶部:
source /etc/profile
只要google-cloud-sdk在您的系统上使用Google的tarball或Ubuntu的snap中的打包版本正确设置,这将在您的脚本中设置google-cloud-sdk的环境(因为我们知道,cron不知道它们在哪里)。在你的脚本中还有其他方法可以做到这一点,比如在所有的google命令前加上绝对路径,或者在你的脚本或cron本身中导出路径。但是,如果在更新Google-cloud-CLI或SDK后,您的prod内容突然全部损坏,这应该可以保存您一些时间;或者你刚刚升级了Ubuntu版本。

相关问题