Linux 服务器后台任务生存指南

Linux 服务器后台任务生存指南

------ 让命令行在断网、重启、关机后依然存活


📌 目录

  1. 为什么需要"后台命令"
  2. 选型速览表
  3. nohup:最简断网保护罩
  4. & + disown:把作业踢出终端
  5. bg/fg:前台↔后台瞬移
  6. setsid:新会话隔离
  7. screen:终端复用老牌神器
  8. tmux:终端复用终极武器
  9. 实战:Tmux 完整工作流
  10. 重启后还原所有会话
  11. 一键脚本:新建/进入会话
  12. 总结 & 速查表

1. 为什么需要"后台命令"

  • SSH 一断,前台任务全灭
  • 训练模型、编译、仿真:需要持久运行 + 随时回看日志
  • 纯 & 并不保险:SIGHUP、终端关闭、网络抖动都会杀死进程

2. 选型速览表

场景 推荐命令 理由
一次性长任务 nohup cmd & 简单,日志文件化
脚本里后台 cmd & disown 一句搞定
已跑任务保活 Ctrl-Z; bg; disown 无需重跑
多人/多窗口 tmux new -s foo 断网无损,面板丰富
老系统无 tmux screen -S foo 预装多,稳定

3. nohup:最简断网保护罩

原理 :忽略 SIGHUP,终端退出后进程继续。
适用 :一次性长任务,无需交互。

bash 复制代码
nohup python train.py > train.log 2>&1 &

文件结构:

复制代码
train.log          # 标准输出+错误
nohup.out          # 若未重定向,默认日志

常用操作:

bash 复制代码
jobs -l           # 查看后台 jobID
kill %1           # 结束 job 1
tail -f train.log # 实时看日志

缺点:无法交互;不能回来看终端。


4. & + disown:把作业踢出终端

原理:先后台运行,再让 shell 忘记它。

bash 复制代码
python train.py &
disown %1

一行写法:

bash 复制代码
python train.py & disown

** vs nohup **:

  • 日志默认仍在屏幕,可重定向
  • 脚本里快速保活

5. bg/fg:前台↔后台瞬移

场景:已在跑的任务,想把它放到后台继续。

bash 复制代码
python train.py     # 跑着跑着发现要断网
Ctrl-Z              # 挂起(暂停)
bg %1               # 放入后台继续跑
disown %1           # 可选:彻底脱离终端

拉回前台:

bash 复制代码
fg %1

6. setsid:新会话隔离

原理:在新会话里启动进程,与当前终端完全脱钩。

bash 复制代码
setsid python train.py

特点:

  • 自动后台,无需 &
  • 父进程 init(systemd),断网不影响
  • 日志默认 nohup.out

7. screen:终端复用老牌神器

功能 :一个 SSH 会话里开多个"虚拟屏",可 detach/attach。

bash 复制代码
# 创建会话
screen -S train

# 在里面正常跑命令
python main.py

# detach(断开回话,任务继续)
Ctrl+A D

# 重新连接
screen -r train

常用键:

键 作用
Ctrl+A ? 帮助
Ctrl+A C 新建窗口
Ctrl+A N/P 切换窗口
Ctrl+A D detach

优点 :系统预装多,简单稳定
缺点:分屏功能弱,配置较老


8. tmux:终端复用终极武器

功能 :窗口、面板、会话恢复、脚本化;断网后任务无损。
参考来源 :https://www.ruanyifeng.com/blog/2019/10/tmux.html

bash 复制代码
# 新建会话
tmux new -s train

# 运行任务
python main.py

# detach(退出终端,任务继续)
Ctrl+B D       `这个  时灵时不灵  刷脸`

# 重新进入
tmux attach -t train

面板操作(一个会话内多屏):

键 作用
Ctrl+B % 纵向分屏
Ctrl+B " 横向分屏
Ctrl+B o 切换面板
Ctrl+B x 关闭面板
Ctrl+B ? 帮助(q 退出)

复制模式(滚动/选文):

bash 复制代码
Ctrl+B [              # 进入复制模式
↑↓ / PgUp/PgDn        # 滚动
Space → Enter         # 选中文本
Ctrl+B ]              # 粘贴

9. 实战:Tmux 完整工作流

bash 复制代码
# 1. 新建带名字会话
tmux new -s code

# 2. 纵向分屏:左码右跑
Ctrl+B %  
vim main.py  
Ctrl+B o  
python main.py

# 3.  detach 离开(任务继续)
Ctrl+B D

# 4. 第二天重新接入
tmux attach -t code

# 5. 结束会话
exit                  # 退出所有面板即自动 kill

10. 重启后还原所有会话(可选插件)

  1. 安装插件管理器

    bash 复制代码
    git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
  2. 在 ~/.tmux.conf 写入

    复制代码
    set -g @plugin 'tmux-plugins/tmux-resurrect'
    set -g @plugin 'tmux-plugins/tmux-continuum'
    set -g @continuum-restore-on '100'
  3. 重载配置

    bash 复制代码
    tmux source-file ~/.tmux.conf
  4. 保存/还原

    • Ctrl+B Ctrl+s 保存当前全部会话
    • 重启后 Ctrl+B Ctrl+r 一键还原

11. 一键脚本:新建/进入会话

保存为 ~/bin/tmux-code:

bash 复制代码
#!/bin/bash
SESSION=${1:-code}
tmux has-session -t $SESSION 2>/dev/null && \
    tmux attach -t $SESSION || \
    tmux new -s $SESSION

赋权使用:

bash 复制代码
chmod +x ~/bin/tmux-code
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
# 无论在哪,直接:
tmux-code

12. 总结 & 速查表

需求 命令
简单后台 nohup cmd &
已跑任务 Ctrl-Z; bg; disown
终端复用 tmux new -s foo → Ctrl+B D → tmux attach -t foo

记住 3 步:

复制代码
tmux new -s foo   Ctrl+B D   tmux attach -t foo

恭喜您拥有了断网不断命令 的服务器终端!

相关推荐
无言听风雨丶25 分钟前
Linux 容器本质探秘:Cgroup 与 Namespace 深度解析与实战
linux·运维·服务器·kubernetes
万联WANFLOW26 分钟前
CVE-2026-98432 等漏洞自查:AI 查出的 Linux、Windows 漏洞,运维怎么确认受不受影响
linux·运维·windows·网络安全
OPEN-F41 分钟前
Ubuntu 自动登录后 GNOME 远程桌面连不上?一次登录钥匙环锁定的排查与永久修复
linux·运维·ubuntu
数字新视界41 分钟前
机房动环监控系统在提升数据中心能效与安全中的应用探索
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
硅基手札1 小时前
【Linux 内核专栏 19】20 · 嵌入式子系统 — GPIO·pinctrl·clock·regulator
linux·运维·单片机·linux内核·嵌入式开发·调试定位
默|笙1 小时前
【Linux网络】传输层协议TCP(3)滑动窗口、流量控制
linux·网络·tcp/ip
ManageEngineITSM2 小时前
工单分类怎么设计?类别、子类别与自动分派的实用方法
大数据·服务器·数据库·人工智能·分类·数据挖掘
一支蜉蝣2 小时前
Day26 XD安全学习笔记--PHP 应用&模版引用&Smarty渲染&MVC 模型&数据联动&RCE 安全
笔记·网络安全·html·php
CANI_PLUS2 小时前
电脑文件共享
运维·服务器
東隅已逝,桑榆非晚2 小时前
算法3.双指针法-快乐数
c++·笔记·学习·算法