"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
所以我通过下载压缩包安装了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