这两天一直在尝试解决这个问题。不确定这是 terraform 还是 GCP 问题。或者我的代码。我正在尝试创建虚拟机并运行一些安装。然后它在 /var/run 中创建一个名为 flag.txt 的文件。如果该文件存在,启动脚本应该退出并且不会在重新启动时运行。我编写了一个 python 脚本来将日期和时间写入 flag.txt 文件,以便我可以进行测试。但是,每次重新启动时,flag.txt 文件中的时间和日期都会更新,显示启动脚本正在运行。
这是我的metadata_startup_script代码
metadata_startup_script = <<-EOF
#!/bin/bash
if [ ! -f /var/run/flag.txt ];
then
sudo apt-get update
sudo 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
chmod +x /tmp/date_flag.py
#Below command is just to show root is executing this script
#whoami >> /usr/bin/runner_id
bash /tmp/install_docker.sh
/usr/bin/python3 /tmp/date_flag.py
else
exit 0
fi
EOF
}
这里是创建flag.txt文件的date_flag.py文件
import datetime
current_datetime = datetime.datetime.now()
formatted_datetime = current_datetime.strftime("%Y-%m-%d_%H-%M-%S")
file_name = f"{formatted_datetime}.txt"
with open("/var/run/flag.txt", "w") as file:
file.write("This file was created at: " + formatted_date
欢迎任何想法或建议。这真的让我发疯。
事实证明 /var/run 符号链接到启动时创建的 /run。我通过将 flag.txt 文件写入 /etc 来修复此问题。
将来,您始终可以从实例运行以下命令来获取脚本执行的日志:
journalctl -u google-startup-scripts.service