【备忘录】Tmux 让进程“脱离”你的 SSH 会话

0 阅读2分钟

日常开发中难免会遇到需要连接远程服务器的情况,各种可视化工具层出不穷,Docker开发更是成为了大多数企业的主流。那你还记得 Tmux 吗?

长情的我还是喜欢古法编程。

WechatIMG215.jpg

Tmux 解决了什么问题?

正常情况: 你本地电脑 → ssh → 远程机器 → 启动服务 问题是:

  • SSH 一断
  • 远程 shell session 被销毁
  • 子进程(你的服务)也被 kill

Tmux 后:你本地 → ssh → tmux session(常驻) → 你的服务

  • SSH 断了 ❌ 不影响 tmux
  • tmux 还在 ✅
  • 你的服务也还在 ✅

TMUX 的基本使用

1️⃣ 创建一个会话

tmux new -s myapp

2️⃣ 在里面启动你的服务

npm run dev
# 或 node app.js

3️⃣ 断开

Ctrl + b,然后按 d 这一步不是退出,是“后台挂起”。

4️⃣ 下次重新连接

tmux attach -t myapp

你会发现:
👉 进程还在跑
👉 日志还在滚

Share 一下我常用的 Tmux + Node 多服务开发方案

断开 SSH 不影响
多服务一键启动
日志/调试清晰
重连后一秒恢复现场

Tmux 推荐配置

编辑:

~/.tmux.conf
# 改 prefix
set -g prefix C-a
unbind C-b
bind C-a send-prefix

# 开启鼠标
set -g mouse on

# 分屏快捷键
bind | split-window -h
bind - split-window -v

# 快速 reload 配置
bind r source-file ~/.tmux.conf \; display "Config reloaded!"

# 状态栏美化
set -g status-bg black
set -g status-fg green

应用:

tmux source-file ~/.tmux.conf

项目结构建议

project/
├── services/
│   ├── api/
│   ├── web/
│   └── worker/
├── logs/
├── scripts/
│   └── tmux-dev.sh
├── ecosystem.config.js   # 可选(PM2)
└── package.json

Node 服务标准化

1️⃣ API(Express)

cd services/api
npm install express nodemon
{
  "scripts": {
    "dev": "nodemon app.js"
  }
}

2️⃣ Web(比如 Vite / Next)

npm run dev

3️⃣ Worker(队列/任务)

{
  "scripts": {
    "dev": "nodemon worker.js"
  }
}

核心:Tmux 一键启动脚本

scripts/tmux-dev.sh

#!/usr/bin/env bash

SESSION="dev"

# 如果 session 已存在,直接 attach
tmux has-session -t $SESSION 2>/dev/null
if [ $? -eq 0 ]; then
  tmux attach -t $SESSION
  exit 0
fi

# 创建 session
tmux new-session -d -s $SESSION

# === API ===
tmux rename-window -t $SESSION "api"
tmux send-keys -t $SESSION "cd services/api && npm run dev" C-m

# === WEB ===
tmux new-window -t $SESSION -n "web"
tmux send-keys -t $SESSION "cd services/web && npm run dev" C-m

# === WORKER ===
tmux new-window -t $SESSION -n "worker"
tmux send-keys -t $SESSION "cd services/worker && npm run dev" C-m

# === LOGS ===
tmux new-window -t $SESSION -n "logs"
tmux send-keys -t $SESSION "tail -f logs/*.log" C-m

# === MONITOR ===
tmux new-window -t $SESSION -n "monitor"
tmux send-keys -t $SESSION "htop" C-m

# 回到 API
tmux select-window -t $SESSION:0

# attach
tmux attach -t $SESSION

使用方式

chmod +x scripts/tmux-dev.sh
./scripts/tmux-dev.sh

开发流程

第一次

ssh server
./scripts/tmux-dev.sh

断开

Ctrl + a → d

再回来

ssh server
tmux attach -t dev

所有服务还在跑,日志还在滚