Crontab中执行含gcloud/gsutil的Bash脚本提示命令未找到的问题
问题原因
crontab执行任务时使用的环境变量PATH和你登录系统后交互式shell的PATH差异很大,默认不会包含gcloud、gsutil这类Google Cloud工具的安装路径。而你直接运行脚本时用的是交互式shell,PATH里已经包含了这些工具的路径,所以能正常执行。
修复方案
以下三种方法任选其一即可:
方法1:使用命令的绝对路径
先在交互式shell里执行以下命令,获取gcloud和gsutil的绝对路径:
which gcloud which gsutil
比如得到的路径是/opt/google-cloud-sdk/bin/gcloud和/opt/google-cloud-sdk/bin/gsutil,然后把脚本里所有的gcloud替换成这个绝对路径,gsutil同理替换。
方法2:在脚本开头配置PATH
在脚本的最顶部添加一行,把Google Cloud工具所在的目录加入PATH:
# 替换成你实际的gcloud安装目录下的bin路径 PATH=$PATH:/opt/google-cloud-sdk/bin
或者直接复制交互式shell的完整PATH:先在shell里执行echo $PATH,把输出的内容赋值给脚本里的PATH,比如:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/google-cloud-sdk/bin
方法3:在crontab中指定PATH
编辑crontab任务(执行crontab -e),在你的任务行上方添加PATH配置,再写任务:
# 包含gcloud/gsutil路径的完整PATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/google-cloud-sdk/bin # 你的定时任务 0 2 * * * /path/to/your/script.sh
内容的提问来源于stack exchange,提问作者kavya
相关产品推荐
相关产品推荐

