有时我有很长时间运行的流程,想要在回家之前启动流程,因此我创建了到服务器的SSH会话以启动该流程,但是随后我想关闭笔记本电脑并回家,晚饭后我想下班前检查一下我开始的过程。如何使用SSH做到这一点?我的理解是,如果断开SSH连接,也会断开服务器上的登录会话,因此会导致长时间运行的进程中断。
有时我有很长时间运行的流程,想要在回家之前启动流程,因此我创建了到服务器的SSH会话以启动该流程,但是随后我想关闭笔记本电脑并回家,晚饭后我想下班前检查一下我开始的过程。如何使用SSH做到这一点?我的理解是,如果断开SSH连接,也会断开服务器上的登录会话,因此会导致长时间运行的进程中断。
Answers:
使用nohup
让您的过程中忽略挂起信号:
$ nohup long-running-process &
$ exit
nohup
拦截SIGHUP,以便当运行它的外壳退出并将SIGHUP发送给所有仍在运行的子代时,long-running-process
它不会死亡。disown
只需从Bash的子列表中删除指定的作业,就不会尝试发送SIGHUP。nohup
是一个与Shell分开的程序,因此它适用于所有Shell,而disown
Bash内置。nohup
接受要运行的命令,而disown
仅在作业启动并且已将其后台化后才能运行,这样您就可以返回Shell。
tail -f nohup.out
检查回来时发生了什么事。
您要使用GNU屏幕。超级棒!
ssh me@myserver.com
screen #start a screen session
run-a-long-process
CTRL+ a,d从您的屏幕会话中分离
exit #disconnect from the server, while run-a-long-process continues
回到笔记本电脑时:
ssh me@myserver.com
screen -r #resume the screen session
然后检查您长时间运行的过程的进度!
screen
是一个非常全面的工具,可以做的比我描述的要多得多。在屏幕会话中,尝试按ctrl + a吗?学习一些常用命令。可能最常见的是:
screen -d -r
以确保如果将另一个外壳程序附加到我的屏幕会话中,那么在我将其恢复到当前系统上之前,它将被分离。screen -S name
然后让您的其他朋友连接到它screen -x name
。
tmux
与tmuxinator
完美结合,适合花哨的设置,而我更喜欢将其screen
作为一种快速简单的解决方案。
如果您尚未计划和设置screen
,请执行以下操作:
如果您的进程在后台运行:转到#3,否则:Ctrl-Z
暂停前台进程。这将报告挂起进程的作业编号,例如:
[1]+ Stopped processName
发送processName
至后台bg %1
(使用紧随其后的工作#%
)。这将processName
在后台继续。
processName
与disown %1
或分开使用disown PID
。-h
如果要保持所有权直到终止当前的shell,请使用该标志。
&
开始工作时就没有使用过。这看起来很棒!
您要使用的屏幕是屏幕,或者甚至更好的是称为byobu的屏幕周围的用户友好包装器。
屏幕允许您在同一ssh会话中运行多个虚拟终端会话。提供了教程和帮助页面。
byobu是一个包装器,可以使用简单的功能键而不是ctrl-a的组合键轻松打开新屏幕。它还显示一个状态行,其中包含所有可以打开的虚拟终端。
另一个不错的功能是,当ssh连接断开时,您的所有屏幕都可以停滞不动。您只需通过ssh再次连接并致电byobu,一切便像以前一样。
最后是byobu的一些屏幕截图。
老问题,奇怪的是,仍然没人建议tmux,它充当n个控制台的包装,并保持打开状态直到需要。除了tmux具有许多功能之外,这还可以进行更多控制。它很容易管理,您只需执行tmux,这将带您进入它的外壳,开始您的日常工作,然后按ctrl + b,然后按d(可分离)(ctrl+b
是tmux的“确定谷歌”,并且d
是关闭命令无需退出外壳)。如果您只需要关闭腻子,这实际上是可行的。晚餐后,当您再次连接时,可以重新打开tmux,tmux attach
以完全离开屏幕的方式查看屏幕。我喜欢的东西是拆分窗格:ctrl+b
然后按"
。要从一个窗格更改为另一个窗格,ctrl+b
然后按向上/向下箭头。
您可以在此处找到一个很好的指南: 断开连接时保持SSH会话运行
sudo apt-get install screen
现在,您只需在命令行中输入screen即可开始新的屏幕会话。您将看到一些有关屏幕的信息。按Enter键,系统将在正常提示下。
断开连接(但保持会话运行), 先按Ctrl+ A,然后按Ctrl+ D。您将看到消息[分离]
重新连接到已经运行的会话
screen -r
重新连接到现有会话,如果不存在则创建一个新会话
screen -D -r
在运行中的屏幕会话中创建新窗口的步骤, 请先按Ctrl+ A,然后C立即连续。您将看到一个新提示。
要从一个屏幕窗口切换到另一个屏幕窗口, 请先按Ctrl+ A,然后依次按Ctrl+ A。
要列出打开纱窗 点击Ctrl+ A,然后W紧接着连续
<kbd>Ctrl</kbd>
用来将名称显示为键盘按键。
我使用NX NoMachine,它对我来说是免费的,因为只有我一个人。本质上,它在服务器上运行X会话,您可以反复连接和断开连接。未连接时,X会话将继续运行。可以从任何地方进行连接。您可以在浮动窗口或包含整个桌面(例如,完整的Gnome桌面)的单个窗口之间选择。客户端(可以在笔记本电脑上运行)可以在Linux,MacOS,Solaris或Microsoft Windows上运行。在后一种情况下,如果选择浮动窗口,它们将分别出现在Windows任务栏上。
我将Windows XP笔记本电脑(我需要某些特定于Windows的硬件所需的笔记本电脑)用作使用NX Nomachine的两台Linux服务器的前端。我什至可以从Linux打印到Windows笔记本电脑附带的打印机上。