在我们退出SSH会话后,4种方法要保留命令运行
我们希望运行一个需要很长时间才能完成的命令,然后退出SSH会话,但即使我们不再与远程系统连接,即使我们也不再连接命令。
你是怎样做的?
正如我们所知,一旦我们退出SSH,就会终止所有正在运行的作业。
你会从头开始工作吗?
你不必。
其中我已经给出了4个方法来从SSH会话中注销后运行的命令。
在Linux中退出SSH会话后,保持命令
可能有很多方法可以做到这一点。
但是,我发现以下方法很容易和直截了当。
方法1 - 使用screen
screen工具是一个具有VT100/ANSI终端仿真的全屏窗口管理器,允许我们在不退出远程作业的情况下安全地分离SSH会话。
它将有助于使用多个远程服务器的人。
在大多数Linux操作系统中预先安装screen命令。
就在情况下,如果未安装,则可以使用分发包管理器安装它。
关于Arch Linux:
$sudo pacman -S screen
在Rhel,CentOS和其他基于RPM的系统上:
$sudo yum install screen
在Debian,Ubuntu和其他基于Deb的系统上:
$sudo apt-get install screen
在SUSE/OpenSUSE上:
$sudo zypper install screen
在远程系统上安装屏幕后,启动screen会话:
$screen
屏幕会话已立即启动。
现在运行我们想要在远程系统上执行的任何工作或者任务。
我要下载Ubuntu 16.04镜像:
$wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso
Ubuntu 16.04 ISO的大小约为1.5GB。
在普通宽带连接中下载近一小时即可。
你不必等待那久。
只需留下在远程系统上运行的下载过程,然后按"Ctrl-A"后跟"D"退出屏幕会话。
我们将看到下面的输出。
[detached from 1365.pts-0.server]
从screen会话中分离后,我们可以从远程系统注销。
远程作业将继续在服务器中运行。
我们可以随时使用命令重新连接到屏幕会话:
$screen -r
你会看到这个过程仍在那里运行。
如果我们有多个屏幕会话,则需要键入屏幕会话ID以便重新连接它。
要查看屏幕会话数,请运行:
$screen -ls
示例输出将是:
There are screens on:There are screens on: 1382.pts-0.server (Saturday 15 July 2016 04:39:51 IST) (Detached) 1365.pts-0.server (Saturday 15 July 2016 04:38:44 IST) (Detached) 2 Sockets in /var/run/screen/S-sk.
现在,重新添加到所需的screen幕会话,例如1382,运行:
$screen -r 1382
有关更多详细信息,请参阅Man页面。
$man screen
方法2 - 使用TMUX
TMUX是终端多路复用器,可以从单个屏幕中创建,访问和控制多个终端。
可以从屏幕上分离TMUX会话并继续在后台运行,然后重新连接。
与屏幕工具一样,我们也可以使用TMUX从SSH会话中分离而不退出远程作业。
TMUX命令已预先安装在大多数Linux操作系统上。
就在情况下,如果未安装,则可以使用分发包管理器安装它。
关于Arch Linux:
$sudo pacman -S tmux
在Rhel,CentOS和其他基于RPM的系统上:
$sudo yum install tmux
在Debian,Ubuntu和其他基于Deb的系统上:
$sudo apt-get install tmux
在SUSE/OpenSUSE上:
$sudo zypper install tmux
安装TMUX后,使用命令启动TMUX会话:
$tmux
现在,开始你的任务或者工作。
然后通过按"Ctrl-B"后跟"D"来安全地分离Tmux会话而不退出远程作业。
这将分离tmux会话,但会在我们在后台运行的情况下留下我们正在进行的。
即使我们与会话断开连接,也意味着所有遥控器都将在运行。
要列出可用的会话,请运行:
$tmux ls 0: 1 windows (created Sat May 15 16:51:35 2016) [134x33] 1: 1 windows (created Sat May 15 16:53:58 2016) [134x33]
我们可以使用相应的会话ID重新连接到TMUX会话,如下所示:
$tmux attach -t 0
有关更多详细信息,请参阅Man页面。
$man tmux
方法3 - 使用Reptyr
如果我们忘记首先启动屏幕/TMUX中的命令,该怎么办?
不用担心。
这是Reptyr有帮助的地方。
Reptyr在Ptys之间移动运行进程。
- reptyr - 将一个终端从一个终端移动到另一个终端的运行过程而不关闭它
方法4 - 使用NOHUP
Nohup,代表否挂断,又是另一个命令行实用程序,以运行Linux命令即使我们与SSH会话断开连接。
由于它是GNU Coreutils的一部分,因此我们不必安装它。
它可以预先安装在所有Linux发行版中。
使用绝对容易。
登录远程系统后,我们所要做的就是:
$nohup <command> &
是的,这很简单。
例子:
$nohup wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso &
现在,我们可以退出SSH会话。
远程作业将继续运行。
登录远程系统并运行以下内容以查看正在运行的作业列表。
$jobs -l [1]+ 1421 Running nohup wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso &
默认情况下,输出将添加到"nohup.out"。
当然,我们可以更改输出文件。
这是另一个例子。
$nohup find -size +10M > log.txt &
上面的命令将找到大于10米的大小的文件,并将输出写入log.txt文件。
有关更多详细信息,请参阅man页面。
$man nohup