一月 22, 2017 · Linux

Linux如何在关闭ssh连接后继续执行命令

当我们远程使用ssh登陆linux服务器执行耗时较长的命令时,是很纠结的事情。

为什么呢?因为一般情况下,我们要等待命令执行完毕后才能关闭ssh连接,如果你在执行过程中断ssh连接,那么linux将会中断ssh用户所运行的命令。但我们总不能每次都等着命令执行完毕,如果耗时很长的任务,总不能把自己绑椅子上。

为解决这个问题,linux下可以使用nohup和screen命令还让命令在后台继续执行,你要做的仅仅只是把命令输入。

我们分别来说说nohup和screen命令。这两个命令都可以让我们脱离ssh连接,但是他们的原理有些区别。

nohup命令

系统自带命令。

linux帮助信息里写着:Run COMMAND, ignoring hangup signals.忽略所有挂断(SIGHUP)信号。

如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,也可以自定义输出文件,如:

nohup command > myout.file

screen命令

非自带命令,需要安装。

yum install screen

screen命令会新建一个会话,在screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。

使用方法:

直接在命令行中输入
screen

在创建screen会话的同时执行命令,如
screen command

在创建screen会话的同时给它命名并执行命令,如
screen -S test1 command

在screen会话下按下ctrl+a开始分离(detached),再在按d退出screen会话。这样我们就回到了ssh的会话中,ssh会话中有[detached]字符提示。

screen会在结束所有会话后自行关闭。

screen会话下所有命令都以 ctrl+a开始。

screen -ls 查看正在运行中的会话

scree -r <pid/name> 回到screen会话,exit命令可退出会话

screen -S <name>指定新作业的名称,方便返回作业查看

其余参数请看帮助。