有时我有长时间运行的进程,要在回家之前启动,因此我创建了到服务器的SSH会话以启动该进程,但是随后我想关闭笔记本电脑并回家,然后晚饭后,我想下班前检查一下我开始的过程。如何使用SSH做到这一点?我的理解是,如果断开SSH连接,也会断开服务器上的登录会话,因此会破坏长时间运行的进程。

#1 楼

使用nohup使您的进程忽略挂断信号:

$ nohup long-running-process &
$ exit


评论


就是这个。无需安装屏幕或tmux。实际上,这是个好方法。当然'screen'或'tmux'都是出色的应用程序,应在需要时使用,但只要在后台运行一个可以注销的进程即可,执行上述操作即可。

– reiche
10年8月14日在11:40

Nohup像是被拒绝吗?

– cjac
2010年8月15日在9:12

它们具有相似的目的,但是在许多方面存在差异。 nohup拦截SIGHUP,以便当运行它的外壳退出并将SIGHUP发送给所有仍在运行的子代时,长时间运行的进程不会死亡。 disown只是从Bash的子列表中删除指定的作业,因此它根本不会尝试发送SIGHUP。 nohup是一个与shell分开的程序,因此它适用于所有shell,而disown是内置的Bash。 nohup接受要运行的命令,而disown仅在作业启动并且已将其背景化之后才能工作,这样您就可以返回Shell。

–沃伦·杨(Warren Young)
2010年8月15日14:00

对于不熟悉nohup和不熟悉的人的真棒快速评论,以及一些处理终端会话的简单方法serverwatch.com/tutorials/article.php/3935306/…

–丹
14年8月12日在21:58

tail -f nohup.out检查返回时发生了什么。

–里卡多·斯图文(Ricardo Stuven)
16年3月3日在15:15

#2 楼

您要使用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 ,?学习一些常用命令。可能最常见的是:



CTRL + a,c创建一个新窗口

CTRL + a,n切换到下一个屏幕会话中的窗口

CTRL + a,p切换到屏幕会话中的上一个窗口
如果您从许多不同的系统登录,则可能不小心使自己处于连接状态到另一台计算机上的活动屏幕会话。因此,我始终使用screen -d -r进行恢复,以确保如果将另一个外壳程序附加到我的屏幕会话中,则在我在当前系统上恢复它之前,它将被分离。


评论


tmux是屏幕的现代类似物。

–zvolkov
2010年8月14日,下午2:21

我不了解现代语言,但是如果您习惯于bash / emacs键,tmux的默认键前缀(Ctrl + b)会有所帮助。

–sajith
2010年8月14日下午4:15

如果出于某种原因想要共享终端,则屏幕非常酷。创建一个屏幕屏幕-S名称,并让您的其他朋友使用屏幕-x名称连接到它。

–帕特里克(Patrick)
2010-10-6 9:23



带tmuxinator的tmux是花哨设置的绝佳组合,而我更喜欢将屏幕作为一种快速,简单的解决方案。

–earthmeLon
2014年6月19日15:31

Ctrl + A,K取消屏幕会话。用y回答以确认“真的杀死这个窗口”问题。

–用户
17-2-27在13:36



#3 楼

如果您尚未计划并设置screen等,请执行以下操作:



如果您的进程在后台运行:转到#3,否则:Ctrl-Z暂停前台进程。这将报告已暂停进程的作业号,例如:

[1]+  Stopped                 processName


processName发送到bg %1到后台(使用在%之后的任何作业号)。这将在后台恢复processName
processNamedisown %1disown PID分开。如果要保持所有权直到终止当前的shell,请使用-h标志。


评论


谢谢你!我有一份工作正在运转,以为我将无法继续下去,因为我没有使用过&开始时。这看起来很棒!

–马特
2012-03-25 15:42

这真太了不起了!我从不知道Linux可以让您转移活动进程的控制权。我担心在长时间运行的过程中,SSH进入服务器时会耗尽电池电量,这就是我的答案!

–冥王星
2014年5月20日在21:05

#4 楼

您要使用的屏幕是屏幕,或者甚至更好的是一个名为byobu的屏幕周围的用户友好包装器。

屏幕允许您在同一ssh会话中运行多个虚拟终端会话。提供了教程和帮助页面。

byobu是一个包装器,可以使用简单的功能键而不是ctrl-a的组合键轻松地打开新屏幕。它还显示了一个状态行,其中包含所有可以打开的虚拟终端,可以命名。

另一个不错的功能是,当ssh连接断开时,您的所有屏幕都可以停滞。您只需通过ssh再次连接并调用byobu,一切便像以前一样。

最后是byobu的一些屏幕截图。

评论


我在Byobu Terminal内的服务器上启动了一个进程,但并不真正知道它是什么(我只是搜索Terminal并单击Byobu,因为之前从未见过)。我一直使用Byobu,因为它的底部有一个彩色状态栏,我认为它很酷。今天,我发现自己想通过SSH远程访问该终端会话。我所要做的就是键入“ byobu”,它立即显示了该终端会话。真的很高兴,我偶然发现了byobu!

–尼克
2015年3月10日20:13



#5 楼

可能值得注意的是,

ssh -t lala screen -rxU moo将附加到主机lala上的moo会话

ssh -t lala screen -S moo将在主机lala上创建moo会话



ssh -t lala screen -S moo quux将在主机lala上创建moo会话并运行程序quux,并在完成时退出该会话。

#6 楼

老问题,奇怪的是仍然没有人建议使用tmux,它充当n个控制台的包装,并保持打开状态直到需要。除了tmux具有许多功能之外,这还可以进行更多控制。它很容易管理,您只需执行tmux,这将带您进入其外壳,开始您的工作,然后按ctrl + b,然后按d(分离)(ctrl+b是tmux的“确定谷歌”,而d是该命令关闭而不退出外壳)。如果您只需要关闭腻子,这实际上是可行的。晚餐后,当您再次连接时,可以使用tmux attach重新打开tmux,以完全按照您的离开来查看屏幕。我喜欢的东西是拆分窗格:ctrl+b,然后按"。要从一个窗格更改为另一个窗格,请ctrl+b,然后按向上/向下箭头。

#7 楼

您可以在此处找到很好的指南:
断开连接后继续运行SSH会话

sudo apt-get install screen


现在,您只需在以下位置输入screen就可以启动新的屏幕会话命令行。系统会显示一些有关屏幕的信息。按下Enter键,您会看到一个正常提示。您将看到以下消息:[已分离]

重新连接到已经运行的会话

screen -r


重新连接到现有会话或创建会话如果不存在则创建一个新窗口
要在运行的屏幕会话内创建一个新窗口
先按Ctrl + A,然后依次按C。您将看到一个新提示。

要从一个屏幕窗口切换到另一个屏幕,请按Ctrl + A,然后立即连续按Ctrl +A。

要列出打开屏幕窗口
先依次按Ctrl + A和W,

评论


您可以使用 Ctrl 将名称显示为键盘按键。

–user147505
16年12月22日在7:41

#8 楼

Tmux是在后台运行长时间运行的进程的不错选择。

我必须在Google云平台的VM实例/服务器(使用OS:Ubuntu 16.0)上继续运行长时间运行的进程。 )。在必须启动SSH终端的地方,必须从终端启动SSH终端,以保持该终端的运行。
至此,一切都很好。但是请等待,如果与我的SSH终端的连接被终止,则长时间运行的进程将立即停止,因此,一旦ssh终端重新启动或从新的ssh终端重新启动,我必须再次运行它们。

我发现tmux是避免在终端关闭后仍要终止我们要运行的进程的好方法。

多路复用器(tmux)启动tmux会话:


启动ssh终端
键入tmux。它将在同一终端中打开一个窗口。
运行命令以在tmux会话中启动长期运行的进程。

现在,即使SSH终端已关闭/终止,tmux会话仍将保持

如果连接终止,那么如何重新连接以查看tmux会话在后台运行的进程:


重新连接或打开新的ssh终端。要查看此进程(保持在后台运行),请键入:tmux attach命令。想要终止tmux会话:


停止该进程。然后在tmux-terminal-window中键入exit

(注意:如果我们使用tmux detach命令:它将从tmux会话窗口/终端退出,而不会终止/停止tmux会话)

有关更多详细信息,请参阅以下文章:


https://www.tecmint.com/keep-remote-ssh-sessions-running-after-disconnection/
https://limitlessdatascience.wordpress.com / 2019/08/22 / tmux-to-keep-jupyter-notebook-running-in-the-background /


#9 楼

我使用NX NoMachine,它对我来说是免费的,因为只有我一个人。本质上,它在服务器上运行X会话,您可以反复连接和断开连接。未连接时,X会话将继续运行。可以从任何地方进行连接。您可以在浮动窗口或包含整个桌面(例如,完整的Gnome桌面)的单个窗口之间选择。客户端(可以在笔记本电脑上运行)可以在Linux,MacOS,Solaris或Microsoft Windows上运行。在后一种情况下,如果您选择浮动窗口,则它们会分别显示在Windows任务栏上。两台使用NX Nomachine的Linux服务器。我什至可以从Linux打印到Windows笔记本电脑附带的打印机。