因此,我通过下载归档文件来安装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访问它时,出现标题中所述的错误。
有什么原因可能是这种情况?
PS我的意图是每24小时使用gcloud进行Firestore备份。
编辑:
正如道格建议的那样,我通过其完整路径引用了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的行为。它不访问环境变量集。此答案中的更多信息
从评论中添加解决方案作为社区Wiki答案
Crontab无法访问环境变量。通过将gcloud添加到用于运行脚本的PATH环境变量中,可以解决此问题。另外,crontab不会使用外壳程序登录设置,建议将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