Linux系统SSH客户端断开后保持进程继续运行配置方法

Linux系统SSH客户端断开后保持进程继续运行配置方法

贡献者:

KB小秘书

 · 

更新时间:2019-08-15 15:18:59

提示: 这是一篇由阿里云ACE开发者(Alibaba Cloud Engineer)贡献,针对特定用户问题发布的文章。文档的内容以原稿呈现,阿里云对于文档内容不做任何形式的承诺。阿里云有权在未经通知的情形下对文档内容做出任何形式的修改。

概述

在Linux系统中,通常我们在执行一些运行时间比较长的任务时,必须等待执行完毕才能断开SSH连接或关闭客户端软件,否则可能会导致执行中断。本文介绍几种保障程序在用户退出登录后持续运行的方法。

 

详细信息

使用管理终端执行

  1. 通过使用管理终端连接Linux实例登录实例。
  2. 执行所需程序或脚本。
  3. 之后需要查看任务执行状态时,再次连接管理终端查看即可。

 

使用nohup执行

nohup可以使后面的命令不会响应挂断(SIGHUP)信号。也就是说,通过远程登录执行nohup命令后,即使退出登录后,程序还是会正常执行。通常情况下,nohup命令最后会跟上&字符,表示将这个命令放至后台执行,这样才能真正做到将这个命令放至后台持续的执行。具体示例如下所示。

提示:nohup通常用于执行无干预的自动化程序或脚本,无法完成带有交互的操作。

  1. 执行如下命令,每秒输出一行信息。
    bash hello.sh
    系统显示类似如下。
  2. 在命令头尾分别加上nohup和&,如下所示,可以看到nohup输出了一行信息,再按一下回车键就跳回了shell命令行,此时命令已经在后台执行了,nohup将命令的输出重定向至当前目录的nohup.out文件中。同时注意到nohup会将对应程序的PID输出,PID可用于需要中断进程时结束进程。
    nohup bash hello.sh &
    系统显示类似如下。
  3. 通过如下命令,可以持续的查看nohup.out的输出,达到监视程序的效果。
    tail -f nohup.out
  4. 在命令中也可以使用重定向将程序的输出改为自己想要的文件名,如下所示,则程序的输出就会写到hello.log文件中。
    nohup bash hello.sh >hello.log &
  5. 若程序不会自动退出,那么此时需要使用kill命令来结束进程。例如,可以使用如下命令,结束进程。
    kill -TRM [$PID]
    注:[$PID]为之前nohup命令输出的值。

 

使用screen执行

安装screen工具

Linux系统默认没有screen工具,需要先进行安装。

  • CentOS系列系统安装命令如下所示。
    yum install screen
  • Ubuntu 系列系统安装命令如下所示。
    sudo  apt-get  install screen

 

使用简介

  1. 执行如下命令,创建screen窗口。
    screen -S [$Name]
    注:[$Name]用来标注screen窗口用途。
  2. 执行如下命令,列出screen窗口。
    screen -ls
    系统显示类似如下。
  3. 当需要运行脚本、执行程序时,在命令前添加screen即可。
  4. 然后使用 Ctrl a 键,再按下 d 键,就可以退出SSH登录,但不会影响screen程序的运行。
  5. 若需要继续工作时,登录实例,然后执行如下命令,恢复会话即可。
    screen -r -d

 

适用于

  • 云服务器 ECS
  • 89

    发布KB

  • 555

    回答问题

  • 1

    粉丝数