欢迎光临
我们一直在努力

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

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

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


📌 目录

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

  • 1. 为什么需要“后台命令”

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

    2. 选型速览表

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

    3. nohup:最简断网保护罩

    原理:忽略 SIGHUP,终端退出后进程继续。 适用:一次性长任务,无需交互。 在这里插入图片描述

    nohup python train.py > train.log 2>&1 &

    文件结构:

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

    常用操作:

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

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


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

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

    python train.py &
    disown %1

    一行写法:

    python train.py & disown

    ** vs nohup **:

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

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

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

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

    拉回前台:

    fg %1


    6. setsid:新会话隔离

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

    setsid python train.py

    特点:

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

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

    功能:一个 SSH 会话里开多个“虚拟屏”,可 detach/attach。 在这里插入图片描述

    # 创建会话
    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 在这里插入图片描述

    # 新建会话
    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 退出)

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

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


    9. 实战:Tmux 完整工作流

    # 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. 重启后还原所有会话(可选插件)

  • 安装插件管理器

    git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

  • 在 ~/.tmux.conf 写入

    set -g @plugin 'tmux-plugins/tmux-resurrect'
    set -g @plugin 'tmux-plugins/tmux-continuum'
    set -g @continuum-restore-on '100'

  • 重载配置

    tmux source-file ~/.tmux.conf

  • 保存/还原

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

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

    保存为 ~/bin/tmux-code:

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

    赋权使用:

    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

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

    赞(0)
    未经允许不得转载:171主机测评 » Linux 服务器后台任务生存指南
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址