有时,我想在回家之前启动长时间运行的进程,因此我会创建一个到服务器的 SSH 会话来启动该进程,但随后我想关闭笔记本电脑并回家。
后来,晚饭后,我想检查一下下班前开始的流程。我怎样才能用 SSH 做到这一点?
我的理解是,如果您中断 SSH 连接,您也会中断服务器上的登录会话,从而终止长时间运行的进程。
答案1
答案2
您想使用 GNU Screen。真是超级棒啊!
ssh [email protected]
screen #start a screen session
run-a-long-process
CTRL+ a,d从屏幕会话中分离
exit #disconnect from the server, while run-a-long-process continues
当您回到笔记本电脑时:
ssh [email protected]
screen -r #resume the screen session
然后检查长时间运行的进程的进度!
screen
是一个非常全面的工具,可以做的事情比我所描述的要多得多。在屏幕会话中,尝试 ctrl+a,?学习一些常用命令。最常见的可能是:
- CTRL+ a,c创建一个新窗口
- CTRL+ a,n切换到屏幕会话中的下一个窗口
- CTRL+ a,p切换到屏幕会话中的上一个窗口
- 如果您从多个不同的系统登录,您可能会不小心将自己连接到另一台计算机上的活动屏幕会话。出于这个原因,我总是恢复以
screen -d -r
确保如果另一个 shell 连接到我的屏幕会话,则在我在当前系统上恢复它之前它将被分离。
答案3
如果您还没有提前计划和设置screen
等,只需执行以下操作:
如果您的进程在后台运行:转到#3,否则:
Ctrl-Z
暂停前台进程。这将报告挂起进程的作业号,例如:[1]+ Stopped processName
发送
processName
到后台bg %1
(使用 后面的作业 #%
)。这将processName
在后台恢复。否认
processName
与disown %1
或disown PID
。-h
如果您想在终止当前 shell 之前保留所有权,请使用该标志。
答案4
多路复用器是在后台运行长时间运行的进程的一个不错的选择。
我必须在谷歌云平台的虚拟机实例/服务器(操作系统:Ubuntu 16.0)上继续运行长时间运行的进程。我必须启动 SSH 终端,并且从终端中,我必须保持终端连接才能运行该进程。现在到目前为止,一切都很好。但是,如果与我的 SSH 终端的连接终止,那么长时间运行的进程会立即停止,因此我必须在 ssh 终端重新启动或从新的 ssh 终端重新运行它们。
我发现tmux
这是一个很好的解决方案,可以避免我们想要在终端关闭后运行的进程终止。
终端复用器( tmux
) 启动tmux
会话:
- 启动 ssh 终端
- 类型
tmux
。它将在同一终端中打开一个窗口。 - 运行命令以在 tmux 会话中启动长时间运行的进程。
现在,即使 SSH 终端突然关闭/终止,tmux 会话也将继续在实例/服务器上运行已启动的 lon 运行进程。
如果连接终止,那么如何重新连接它以查看后台 tmux 会话中运行的进程:
- 重新连接或打开新的 ssh 终端。要查看此进程(在后台保持运行),请输入:
tmux attach
command。
想要终止 tmux 会话:
- 停止该过程。然后输入
exit
tmux-terminal-window。
(请注意:如果我们使用tmux detach
命令:它将从 tmux 会话窗口/终端退出,而不终止/停止 tmux 会话)
更多详情请参考以下文章: