You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 18系统下Crontab执行gcloud关闭GCP VM实例失败求助

问题解决步骤

1. 修复脚本基础语法与兼容性问题

原脚本中source/etc/profile缺少空格属于语法错误,首先修正为source /etc/profile。
同时为避免环境变量加载异常,建议在脚本中补全gcloud命令的绝对路径,可先执行which gcloud获取gcloud的实际路径(例如返回/usr/bin/gcloud),修改后的完整脚本参考:

#!/bin/bash
# 开启调试模式,方便后续排查问题
set -x
source /etc/profile
# 替换为你实际查到的gcloud绝对路径
echo Y | /usr/bin/gcloud compute instances stop my-vm-name --zone us-central1-a
sleep 120s
echo "completed"

2. 修正Crontab配置

crontab默认执行环境的变量、shell规则和用户手动执行的环境差异很大,按以下规则调整:

  • 确认crontab所属用户和你手动执行脚本的用户一致:如果手动执行时用的是普通用户,就用crontab -e编辑当前用户的定时任务,不要使用sudo操作root的crontab,否则root用户没有对应的gcloud认证配置。
  • 匹配脚本的解释器,同时补全错误日志输出:你脚本声明的是bash解释器,不要用sh调用,同时添加2>&1把错误输出也重定向到日志中,方便排查问题,调整后的定时规则如下:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
20 17 * * *  /bin/bash /home/user/Desktop/script.sh >>/home/user/cron.log 2>&1

开头额外添加的PATH配置可以避免crontab默认环境找不到命令的问题。

3. 补充gcloud认证配置

gcloud的认证凭证默认存储在当前用户的~/.config/gcloud/目录下,如果仍执行失败,可以在脚本中显式声明认证配置:

  • 如果你用的是服务账号密钥,在脚本source /etc/profile行后添加:
export GOOGLE_APPLICATION_CREDENTIALS="替换为你的服务账号密钥json文件绝对路径"

4. 验证测试

修改完成后可以先把定时任务改成每分钟执行一次测试:

* * * * * /bin/bash /home/user/Desktop/script.sh >>/home/user/cron.log 2>&1

等待1分钟后查看/home/user/cron.log的内容,根据日志中的报错信息做对应调整即可。

内容的提问来源于stack exchange,提问作者Anonyme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:54:03