GCP抢占式VM启动脚本中tmux会话异常求助
问题排查与解决方案
核心问题分析
从系统日志看tmux相关进程仍在运行,但tmux ls无法检测到会话,本质是tmux会话的socket路径与用户SSH登录环境不匹配;同时conda环境加载的不确定性、脚本执行无日志输出,导致无法定位spot_test.py未生成文件的原因。
具体修复步骤
1. 显式指定tmux Socket路径
tmux默认使用/tmp下的socket文件,但sudo切换用户时的环境与SSH登录后的环境可能存在差异(如TMPDIR变量不同),导致会话无法被检测到。修改启动脚本中的tmux命令,将socket指定到用户主目录下的专属路径:
# 替换原tmux命令为: tmux start-server -S /home/user/.tmux/main_socket && echo "--- Line 1 OK" >>/tmp/debug.txt tmux new -d -s main -S /home/user/.tmux/main_socket 'sleep 1; cd /home/user/spot_vm; eval "$(/home/user/miniconda3/bin/conda shell.bash hook)"; conda activate test; python spot_test.py >>/home/user/spot_vm/run.log 2>&1' && echo "--- Line 2 OK" >>/tmp/debug.txt
同时在sudo切换用户的代码块开头,提前创建socket目录并设置权限:
mkdir -p /home/user/.tmux chmod 700 /home/user/.tmux
2. 修复conda环境加载逻辑
非交互式shell中.bashrc通常不会执行,直接调用conda的绝对路径加载hook更可靠,避免依赖source .bashrc的不确定性。
3. 添加脚本运行日志
给spot_test.py添加标准输出/错误重定向,方便排查脚本是否未执行或报错:
python spot_test.py >>/home/user/spot_vm/run.log 2>&1
4. SSH登录后连接tmux会话的命令
登录后需要指定相同的socket路径才能找到会话:
tmux -S /home/user/.tmux/main_socket attach -t main
完整修改后的启动脚本
#!/bin/bash sudo -u user bash <<EOF mkdir -p /home/user/.tmux chmod 700 /home/user/.tmux cd /home/user/ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/miniconda3.sh 2> log_miniconda bash /tmp/miniconda3.sh -b -p /home/user/miniconda3 2> log_minicondash # 直接加载conda hook,跳过init和bashrc依赖 eval "$(/home/user/miniconda3/bin/conda shell.bash hook)" conda create -y -n test python=3.8 gsutil cp -r gs://my-bucket/spot_vm /home/user/ tmux start-server -S /home/user/.tmux/main_socket && echo "--- Line 1 OK" >>/tmp/debug.txt tmux new -d -s main -S /home/user/.tmux/main_socket 'sleep 1; cd /home/user/spot_vm; eval "$(/home/user/miniconda3/bin/conda shell.bash hook)"; conda activate test; python spot_test.py >>/home/user/spot_vm/run.log 2>&1' && echo "--- Line 2 OK" >>/tmp/debug.txt EOF
验证步骤
- 重启VM或重新执行启动脚本
- SSH登录后执行
tmux -S /home/user/.tmux/main_socket ls,确认会话存在 - 查看
/home/user/spot_vm/run.log检查python脚本运行状态 - 查看
/tmp/debug.txt确认tmux命令执行成功
内容的提问来源于stack exchange,提问作者Davide
相关产品推荐
相关产品推荐

