news 2026/3/20 9:47:09

screen,nohup使用的方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
screen,nohup使用的方法

方案二:使用终端复用工具(最可靠)

如果心跳保活仍不能解决问题,或你希望在连接断开时保证程序持续运行,最根本的解决方案是使用终端复用工具(如screentmux)。

这种方法的核心是将程序运行在一个独立的、与SSH连接无关的后台会话中。即使你的电脑锁屏或VS Code断开,程序也会在服务器上继续执行。

📝 如何使用 Screen
下面以常用的screen工具为例,介绍基本操作:

  1. 安装:在远程服务器上运行sudo apt-get install screen或相应系统的安装命令。

  2. 创建新会话:运行screen -S your_session_name,这将开启一个新的虚拟终端。

  3. 在会话中运行程序:在这个新终端里正常启动你的程序。

  4. 分离会话:按下Ctrl+A,松开后按D键,即可将会话“挂起”到后台,程序会继续运行。你的终端会显示[detached]

  5. 恢复会话:当你需要查看程序输出时,运行screen -r your_session_name即可重新接入该会话。

其他可选的辅助措施

  • 启用VS Code的自动重连:在VS Code的设置中,可以搜索并开启remote.autoReconnect选项。

  • 清理残余进程:如果异常断开后无法重新连接,可能是因为旧的vscode-server进程残留在服务器上。可以执行命令Kill VS Code Server on Host来清理。

总结与建议

总的来说,你可以参考以下决策表来选择最适合你的方案:

你的需求场景建议方案原因
仅想保持VS Code连接不断开首选“配置SSH心跳保活”配置简单,对大多数因网络空闲造成的断开有效。
要运行长时间任务(如模型训练)必须使用screentmux这是最可靠的解决方案,能保证任务在任何网络波动下都不会中断。
仍无法连接,或频繁出现验证错误在VS Code中执行Kill VS Code Server on Host此操作可以清理服务器上的旧进程,解决因进程残留导致的连接故障。

希望这些方法能帮助你解决锁屏断开连接的问题!如果你能告诉我你主要用远程连接来做什么(比如是普通编程,还是需要运行不能中断的长期任务),我可以给你更具体的建议。

如何知道我的your_session_name

当你使用screen时,记住或找到your_session_name(会话名)很简单,这里有几个常用方法:

1. 创建时立即命名(最推荐)

在创建会话时,直接使用-S参数指定一个好记的名字。

bash

screen -S train_session # 创建一个名为 "train_session" 的会话 screen -S web_project # 创建一个名为 "web_project" 的会话

养成这个习惯是一劳永逸的解决方案。

2. 忘记名字后如何查看

如果你忘记了名字,或者接手了别人的会话,可以使用以下命令来列出当前服务器上所有存在的screen会话

bash

screen -ls

这条命令会输出类似下面的信息,清晰地显示了会话ID和会话名:

bash

There are screens on: 12345.train_session (Detached) 67890.web_project (Detached) 11111.pts-1.server (Attached)
  • 12345.train_session:这里,12345是会话ID,train_session就是你设置的会话名。

  • (Detached)表示会话在后台运行。

  • (Attached)表示会话正在被某个终端使用。

3. 如何恢复会话

拿到会话名或ID后,就可以恢复会话了,下面是三种恢复方法:

使用场景命令说明
用会话名恢复screen -r train_session最常用,直接使用你创建时起的名字。
用会话ID恢复screen -r 12345当会话名有重复时,用唯一ID更准确。
如果你只有一个会话screen -r省略参数,如果有且仅有一个会话,会直接恢复它。

4. 忘记分离(Detach)时怎么办

如果你在screen会话中工作,但没有按Ctrl+A D分离,而是直接关闭了终端或SSH窗口,会话会变成(Attached)状态。这时直接-r会失败,提示需要先“夺回”。

  • 解决方法:使用-d参数先将其强制分离到后台,再恢复。

    bash

    screen -d -r train_session # 或者分两步: # screen -d train_session # 先分离 # screen -r train_session # 再恢复

使用小技巧:简化操作

  • 恢复最近使用的会话:直接运行screen -r(不带参数)通常可以快速恢复你最后使用的那个会话。

  • 避免忘记名字:在创建时,使用和你项目、任务直接相关的名字,例如model_trainingdjango_server,这样会非常直观。

核心要点:当你不确定时,随时使用screen -ls查看所有会话的列表,这是管理screen会话的基石。

希望这些方法能帮你轻松管理会话!如果你在具体操作中遇到其他问题,比如screen -ls没有输出,可以告诉我,我再帮你分析可能的原因。

本地关机也可以吗

不可以。“锁屏”和“本地关机”是完全不同的两种情况,处理方式有根本区别。

简单来说,screentmux这类工具只能解决因“SSH连接中断”导致的问题,而无法解决因“本地计算机关机”导致的操作停止。关键差异如下:

场景发生了什么对远程服务器的影响screen/tmux是否有效
本地锁屏/待机/网络波动SSH隧道(连接)被操作系统或路由器断开。远程服务器上运行的shell进程(如Bash)会终止,导致其下的所有命令(如python train.py)也被迫停止。✅ 完全有效。因为它们让程序运行在独立于SSH连接的后台会话中,连接中断不影响会话。
本地关机/休眠(挂起到硬盘)整个本地操作系统关闭,你本地的VS Code和SSH客户端进程彻底结束你与服务器之间的整个操作会话(包括所有终端和端口转发)都被终结❌ 无效。因为screen会话虽然仍在服务器后台,但其前台交互能力依赖于SSH建立的虚拟终端。本地客户端关机后,这个虚拟终端被销毁,你将无法再通过原有方式直接“恢复”这个会话的交互界面

“关机后”的真相与解决方案

你可以这样理解:本地关机后,screen会话就像一个被切断了遥控器和显示器的机器人,它确实还在服务器上埋头工作,但你失去了实时操控和看到它画面的渠道

针对“需要本地关机”的情况,你有以下两种可靠的选择:

方案一:使用真正的后台任务(首选)

这是最规范、最健壮的做法,适用于运行脚本、模型训练、编译等任务。核心是将程序作为系统守护进程运行,彻底摆脱对终端会话的依赖。

  • 如何操作

    1. 使用nohup命令让程序忽略挂断信号,并用&放到后台。

      bash

      nohup python your_script.py > output.log 2>&1 &
      • > output.log:将程序的标准输出保存到日志文件。

      • 2>&1:将错误输出也重定向到同一个日志文件。

      • &:在后台运行。

    2. 运行后,会返回一个进程ID(PID),记下它。之后你可以用kill [PID]来结束进程。

    3. 查看运行状态和输出:

      bash

      tail -f output.log # 实时查看日志 ps aux | grep python # 查看进程状态
方案二:结合使用(针对需要交互的复杂任务)

如果任务中途需要交互(比如需要偶尔输入命令的服务器),可以先启动screen会话,然后在screen里再用nohup启动程序

  1. SSH登录服务器,启动一个命名清晰的screen会话:

    bash

    screen -S my_service
  2. 在这个screen会话里,启动你的后台程序:

    bash

    nohup ./start_server.sh > server.log 2>&1 &
  3. 现在你可以安全地分离这个screen会话(Ctrl+A, D),即使后续本地关机,程序也会在服务器上持续运行。

  4. 未来如何管理

    • 查看程序输出:重新登录服务器,用tail -f server.log查看日志。

    • 需要交互时:重新登录服务器,用screen -r my_service恢复会话,此时你就在当初启动程序的那个环境里了。

总结与决策建议

你的需求推荐方案关键原因
运行一个无需交互的脚本/任务nohup ... &后台任务与终端彻底解耦,是标准的服务器后台运行方式,最稳定可靠。
运行一个可能需要中途查看或简单交互的服务screen+nohup组合既保证了程序持续运行,又保留了在需要时恢复完整交互环境的能力。
只是短暂离开,本地计算机保持开机仅用screentmux完美应对锁屏、睡眠、网络中断等连接问题,恢复工作状态最简单。

总而言之,如果你的工作流程中包含本地关机,那么将关键任务配置为系统后台服务是必须的步骤screen更适合作为你在一个“工作日内”保持工作状态不中断的工具。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/20 8:27:24

Linly-Talker技术深度拆解:LLM+TTS+面部驱动全集成

Linly-Talker技术深度拆解:LLMTTS面部驱动全集成 在电商直播间里,一个面容亲切的虚拟主播正微笑着介绍新品,她的口型与语音完美同步,语气自然,甚至能根据用户提问实时回应——这一切并非来自昂贵的动作捕捉棚&#xff…

作者头像 李华
网站建设 2026/3/19 12:22:33

Linly-Talker支持语音反讽识别,提升语义理解层次

Linly-Talker支持语音反讽识别,提升语义理解层次 在虚拟主播能带货、AI客服会接单的今天,我们对“智能”的期待早已超越了简单的问答匹配。用户不再满足于一个只会复读关键词的机器,而是希望对面那个数字面孔能听懂潜台词、接住调侃、甚至回敬…

作者头像 李华
网站建设 2026/3/13 17:40:59

【Open-AutoGLM日志分析实战指南】:掌握高效故障排查的5大核心技巧

第一章:Open-AutoGLM日志分析工具的核心价值Open-AutoGLM 是一款专为现代分布式系统设计的日志智能分析工具,融合了自动化日志解析、语义理解与异常检测能力。其核心基于 GLM 大语言模型架构,能够对非结构化日志流进行高效语义建模&#xff0…

作者头像 李华
网站建设 2026/3/11 11:47:12

【稀缺资料】Open-AutoGLM项目管理模板库首次开放,限时领取5大核心文档

第一章:Open-AutoGLM多团队协作项目管理概述 Open-AutoGLM 是一个面向大规模语言模型自动化开发与集成的开源框架,支持跨组织、多团队协同参与模型训练、评估与部署。其核心设计理念是通过标准化接口与模块化解耦,实现研发流程的高效并行化。…

作者头像 李华
网站建设 2026/3/13 5:35:12

6.4 上线验收全流程:从评审到交付的关键节点

6.4 Prompt 实战:实际应用场景中如何应用 Prompt 引言 在前几节中,我们学习了Prompt的基础概念、设计原则以及进阶技术。现在,让我们通过具体的实战案例,深入了解Prompt在各种实际应用场景中的应用方法和技巧。 作为产品经理,掌握Prompt的实际应用能力至关重要。这不仅…

作者头像 李华