连载中 11/20

nohup 与 tmux:让任务在断线后依然活着

2026-10-16 · 28 阅读 · 0 评论 · 0 赞

为什么 SSH 一断,任务就死

你在 SSH 会话里启动的进程,会话断开时会收到 SIGHUP 信号(挂断),默认行为就是退出。数据迁移跑到 80% 网线一抖、晚上盯大版本发布到家半路断网——全栽在这。两个解法各管一半:nohup 让进程「听不见」挂断信号,tmux 让会话「搬」到服务器上。

nohup:最轻量的后台保命

$ nohup ./data-migrate.sh > migrate.log 2>&1 &
[1] 31521
$ tail -f migrate.log     # 另开窗口盯进度

拆解这行标配:nohup 免疫 SIGHUP、> migrate.log 2>&1 把输出和错误都写进日志(不写的话默认进 nohup.out)、末尾 & 丢到后台。缺一不可——只加 & 不加 nohup,断线照样死;只加 nohup 不加 &,你的终端会被输出糊满。

nohup 的局限:进程活着,但你回不到那个现场——看不到实时画面、不能交互输入。想要「断线重连后一切如初」,用 tmux。

tmux:把终端会话放在服务器上

$ tmux new -s work       # 新建名为 work 的会话(在里面正常干活)
$ tmux ls                # 列出所有会话
work: 2 windows (created ...)   ← 断线后它还在

# 会话内 Ctrl+b d  →  分离(detach),回到外层 shell
$ tmux a -t work         # 重新附着(attach),画面原样恢复

心智模型一句话:tmux 会话活在服务器上,SSH 只是你的「观看窗口」——窗口碎了,会话还在。重连一句 tmux a -t work,正在跑的任务、打开的 vim、滚动的日志原样都在。

两个高频快捷键(都在 Ctrl+b 前缀之后):c 新建窗口、[ 进入滚动模式(PgUp/PgDn 翻历史日志,q 退出)。老牌的 screen 命令同理,新项目无脑选 tmux。

实战:盯一次大版本发布的正确姿势

# 1. 发布开始前,先开 tmux 会话
$ tmux new -s release-0328

# 2. 会话里执行发布脚本 + 盯日志
$ ./deploy.sh | tee deploy.log
$ tail -f /var/log/app/app.log

# 3. 下班回家路上网络断了?到家后:
$ tmux a -t release-0328    # 全部画面原样恢复,一个字节没丢

顺带一提:发布频繁、服务要常驻的,别用 nohup 也不用 tmux——那是下一篇 systemd 的活,把服务注册成系统单元才能开机自启、崩溃自动拉起。

☕
503

10 年全栈工程师 · 503咖啡馆主理人

#nohup#tmux#后台任务#SSH断线#终端复用

评论 (0)

热门推荐

连载中 11/22

主从搭建实操:从零配出一主两从

光讲原理不过瘾?手把手搭一主两从:my.cnf 六个参数、复制账号、GTID、CHANGE REPLICATION SOURCE TO、SHOW REPLICA STATUS 验收,附翻车排查清单。

#MySQL#主从复制#GTID#主从搭建#高可用
2026-05-07 · 10114 阅读 · 0 评论 · 0 赞
连载中 16/22

连接池:HikariCP 参数与连接风暴

连接池不是越大越好:8 核机器配 1000 连接反而更慢的数学原理,HikariCP 四个必调参数,maxLifetime 与 wait_timeout 的隐形陷阱。

#MySQL#连接池#HikariCP#maxLifetime#连接风暴
2026-05-10 · 9877 阅读 · 0 评论 · 0 赞
连载中 4/16

缓存穿透:恶意 ID 打穿 MySQL 的四道防线

请求的数据在缓存和数据库里都不存在时,缓存形同虚设。聊聊参数校验、空值缓存、布隆过滤器、限流熔断四道防线的原理与组合打法。

#Redis#缓存穿透#布隆过滤器#高可用
2026-05-16 · 9307 阅读 · 21 评论 · 287 赞