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

能否通过Cron Job定时启停Compute Engine?求对应实现脚本

关于Cron Job调度Compute Engine虚拟机启停的问题解答

1. 是否可以使用Cron Job在指定时间启动Compute Engine?

完全可以。你可以通过两种主流方式实现:

  • 本地Cron任务:在有权限访问GCP的机器上,用Cron调用gcloud命令直接操作实例
  • GCP Cloud Scheduler:这是GCP官方托管的定时任务服务,无需自己维护Cron运行环境,稳定性更高,适合生产场景

两种方式都要求执行身份(本地账号或GCP服务账号)拥有compute.instances.start和compute.instances.stop权限。

2. 可指定时间启停Compute Engine的Cron Job脚本/配置

方式一:本地Cron + gcloud脚本

先确保本地已安装gcloud CLI,且完成身份认证(要么用gcloud auth login登录个人账号,要么用服务账号密钥gcloud auth activate-service-account --key-file=你的密钥文件.json)。

1. 编写启停脚本(保存为gce-scheduler.sh)

#!/bin/bash

# 替换成你的实际配置
PROJECT_ID="your-gcp-project-id"
ZONE="us-central1-a"
INSTANCE_NAME="your-vm-instance-name"
LOG_FILE="/var/log/gce-scheduler.log"

# 启动实例
start_instance() {
  gcloud compute instances start "$INSTANCE_NAME" --project="$PROJECT_ID" --zone="$ZONE"
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] 启动实例 $INSTANCE_NAME,执行状态码:$?" >> "$LOG_FILE"
}

# 停止实例
stop_instance() {
  gcloud compute instances stop "$INSTANCE_NAME" --project="$PROJECT_ID" --zone="$ZONE"
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] 停止实例 $INSTANCE_NAME,执行状态码:$?" >> "$LOG_FILE"
}

# 处理传入参数
case "$1" in
  start)
    start_instance
    ;;
  stop)
    stop_instance
    ;;
  *)
    echo "错误:请传入 start 或 stop 参数"
    exit 1
    ;;
esac

2. 给脚本添加执行权限

chmod +x gce-scheduler.sh

3. 配置Cron任务

运行crontab -e打开Cron编辑界面,添加以下规则:

  • 每天早上8点启动实例:
    0 8 * * * /full/path/to/gce-scheduler.sh start
    
  • 每天晚上10点停止实例:
    0 22 * * * /full/path/to/gce-scheduler.sh stop
    

注意:替换/full/path/to/为脚本实际存放路径,Cron默认路径可能找不到gcloud,可以在命令前加上PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin或者直接用gcloud的完整路径(比如/usr/local/bin/gcloud)。

方式二:GCP Cloud Scheduler(推荐生产环境)

无需本地维护脚本,直接用GCP托管服务:

  1. 登录GCP控制台,进入Cloud Scheduler服务
  2. 创建新任务:
    • 频率:输入Cron表达式(比如0 8 * * *表示每天UTC时间8点,注意时区设置)
    • 目标类型:选择HTTP
    • URL:填写实例启停的API端点,启动实例的URL示例:
      https://compute.googleapis.com/compute/v1/projects/[你的项目ID]/zones/[实例区域]/instances/[实例名]/start
      
    • HTTP方法:选择POST
    • 身份验证:选择服务账号,并确保该账号拥有compute.instances.start权限
  3. 重复上述步骤创建停止实例的任务,URL替换为/stop即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:14:49