GCP Spot VM托管实例组启动脚本运行异常求助
问题原因
- 启动脚本以root身份运行:Google Cloud启动脚本默认使用
root用户执行,此时~指向/root目录,而非普通用户的/home/<username>。所以gsutil cp命令会将spot_vm目录下载到/root/spot_vm,你手动登录普通用户自然找不到该目录。 - Conda环境变量未即时生效:虽然脚本中执行了
conda init bash和source ~/.bashrc,但conda init仅为当前用户(root)配置bashrc,且脚本执行的上下文可能导致环境变量未即时加载,直接调用conda命令时会出现"command not found"错误。另外,后续tmux会话是独立shell,也无法自动继承root的conda环境。
解决方案
方案1:切换到普通用户执行(推荐,与手动执行环境一致)
修改启动脚本,切换到你的普通用户(以默认的ubuntu为例,需根据实际用户调整)执行所有操作:
#!/bin/bash sleep 60 # 指定目标普通用户 TARGET_USER=ubuntu su - $TARGET_USER << 'EOF' # 更新系统包 yes Y | sudo apt-get update # 安装tmux yes Y | sudo apt-get install tmux # 安装Miniconda wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh -b rm Miniconda3-latest-Linux-x86_64.sh ~/miniconda3/bin/conda init bash source ~/.bashrc # 从GCS拉取文件到普通用户home目录 gsutil cp -r gs://my_bucket/spot_vm ~/ # 创建conda环境 yes Y | conda create -n test python=3.10 # 启动tmux会话运行脚本 tmux new-session -d 'cd ~/spot_vm; eval "$(conda shell.bash hook)"; conda activate test; python spot_test.py' EOF
方案2:以root用户运行,使用绝对路径
若坚持用root执行,需全程使用绝对路径确保环境和路径正确:
#!/bin/bash -i sleep 60 yes Y | apt-get update # 安装tmux yes Y | apt-get install tmux # 安装Miniconda到root目录 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh -b -p /root/miniconda3 rm Miniconda3-latest-Linux-x86_64.sh /root/miniconda3/bin/conda init bash source /root/.bashrc # 明确指定下载路径到root目录 gsutil cp -r gs://my_bucket/spot_vm /root/ # 用绝对路径调用conda创建环境 yes Y | /root/miniconda3/bin/conda create -n test python=3.10 # tmux会话中用绝对路径加载conda环境 tmux new-session -d 'cd /root/spot_vm; eval "$(/root/miniconda3/bin/conda shell.bash hook)"; conda activate test; python spot_test.py'
验证步骤
- 重新创建实例模板并更新托管实例组,启动新实例。
- 登录实例后,方案1检查
/home/<TARGET_USER>/spot_vm,方案2检查/root/spot_vm。 - 执行
tmux ls查看会话,用tmux attach-session -t <会话名>进入会话确认脚本运行状态。
内容的提问来源于stack exchange,提问作者Davide
相关产品推荐
相关产品推荐

