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

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

验证步骤

  1. 重启VM或重新执行启动脚本
  2. SSH登录后执行tmux -S /home/user/.tmux/main_socket ls,确认会话存在
  3. 查看/home/user/spot_vm/run.log检查python脚本运行状态
  4. 查看/tmp/debug.txt确认tmux命令执行成功

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:05:32