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

GCP Terraform metadata启动脚本已存在flag文件仍重复运行问题

GCP启动脚本重复执行问题排查与解决方案

核心问题定位

你的启动脚本重复执行的根本原因是**/var/run是临时文件系统(tmpfs)**,系统重启后该目录下的所有文件会被清空,导致每次重启时flag.txt都不存在,脚本自然会重新执行。

排查与修复步骤

1. 迁移flag文件到持久化目录

将flag文件从/var/run移动到不会随重启清空的目录,比如/var/lib或/etc:

  • 修改启动脚本中的检查路径:
    if [ ! -f /var/lib/setup_completed.flag ];
    
  • 修改Python脚本中的写入路径:
    with open("/var/lib/setup_completed.flag", "w") as file:
        file.write("This file was created at: " + formatted_datetime)
    

2. 修复Python脚本语法错误

你的date_flag.py存在两处语法问题,会导致脚本执行失败(需确认实际运行版本是否已修正):

  • 变量名错误:formatted_date未定义,应为formatted_datetime
  • 语句未闭合:write方法末尾缺少右括号
    修正后的完整Python脚本:
import datetime

current_datetime = datetime.datetime.now()
formatted_datetime = current_datetime.strftime("%Y-%m-%d_%H-%M-%S")
# 原代码中file_name变量未使用,可删除
with open("/var/lib/setup_completed.flag", "w") as file:
    file.write("This file was created at: " + formatted_datetime)

3. 简化启动脚本的权限逻辑

GCP虚拟机的启动脚本默认以root用户执行,无需添加sudo前缀,避免不必要的权限问题:

#!/bin/bash

if [ ! -f /var/lib/setup_completed.flag ]; then
    apt-get update
    apt-get install -y gcloud
    echo '${local.script_content}' > /tmp/install_docker.sh
    echo '${local.flag_content}' > /tmp/date_flag.py
    chmod +x /tmp/install_docker.sh /tmp/date_flag.py
    bash /tmp/install_docker.sh
    /usr/bin/python3 /tmp/date_flag.py
else
    exit 0
fi

4. 验证脚本执行状态

  • 查看启动脚本日志:journalctl -u google-startup-scripts.service,确认脚本是否因文件不存在而重复执行
  • 手动创建flag文件后重启虚拟机,检查脚本是否不再执行:
    touch /var/lib/setup_completed.flag
    reboot
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 11:52:47