使用screen管理远程会话断开连接后程序仍然继续在后台执行

  • A+
所属分类:Linux

使用screen管理远程会话断开连接后程序仍然继续在后台执行

今晚进行数据库迁移操作,耗时有些长,担心终端异常中断导致转移程序中断而半途而废。因此考虑开screen来跑迁移程序。

如果终端异常断开,或网络中断,远程会话运行的程序就会中断。解决的办法有:

1.使用nohup命令

2.使用screen命令

用ssh连接服务器进行一些需要长时间运行的任务开一个远程终端窗口,在此期间是不能关掉窗口或断开连接,否则这些任务将被中断执行。

下面来看看关掉窗口或断开连接会使正在运行的任务中断的原因:

进程组:一个或多个进程的集合,每一个进程组有唯一一个进程ID

会话期:一个或多个进程组的集合,有唯一一个会话期首进程

会话期可以有一个单独的控制终端,与控制终端连接的会话期首进程叫做控制进程,当前与终端交互的进程为前台进程组,其余进程组称为后台进程组

挂断信号(SIGHUP)默认的动作是终止程序。

当终端接口检测到网络连接断开,将挂断信号发送给控制进程(会话期首进程)。

如果会话期首进程终止,则该信号发送到该会话期前台进程组。

一个进程退出导致一个孤儿进程组中产生时,如果任意一个孤儿进程组进程处于STOP状态,发送SIGHUP和SIGCONT信号到该进程组中所有进程。

因此,当网络中断或关掉终端窗口,控制进程收到SIGHUP信号退出,会导致该会话期内其他进程退出。

使用screen

Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。Screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。创建screen窗口的方式:

1.直接输入screen命令

# screen

将创建一个执行shell的窗口,任意执行程序。输入exit命令将退出当前窗口。

2.在screen命令后跟上要执行的程序

# screen php move_security_log.php

3.在一个已有的screen会话中创建新的窗口。在当前screen窗口中键入ctrl+A+C,在该会话内生成一个新的窗口并切换到该窗口。还可以不中断screen窗口中运行的程序而暂时端口screen会话,并可以在随后重新连接该会话。如:

暂时中断会话:Ctrl+A+D

重新连接会话:

# screen -ls

There is a screen on:

836.pts-3.ubuntu (04/09/2012 01:53:53 AM) (Detached)

# screen -r 836

默认情况下,screen接收的命令是以Ctrl+A开头的。

不再解释了,具体看man screen.

转载请注明出处:http://www.ttlsa.com/html/1243.html

weinxin
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: