在实际工作中,我们ssh等到远程的Linux上,运行一个程序,但是当我们关闭掉我们的连接终端断开ssh后,刚才运行着的程序也会自动被中断结束。
当ssh连接断开后,如何让我们的程序继续在后台运行呢?下面介绍我常使用的两个方法。
A、使用nohup让程序在后台继续运行
常用命令:# nohup /scripts/test.sh > testlog.log & #如果没有自定义重定向输出信息,运行成功后默认会将标准输出重定向到当前目录的nohup.out文件中
当需要将nohup后台运行的程序调到前台时,先jobs命令查看后台job编号,用 fg %n命令可以调回到前台运行(n是job的编号)。例如:
[root@centos1152 ~]# nohup /root/cp11.sh > cp11.log & #回车后脚本开始后台执行
[1] 3485
[root@centos1152 ~]# jobs
[1]+ Running nohup /root/cp11.sh > cp11.log &
[root@centos1152 ~]# fg %1
nohup /root/cp11.sh > cp11.log #回到job 1会话中了
Last login: Sat Jun 9 23:07:03 2012 from 192.168.11.100
如果此时突然ssh断开了,那么再登陆到系统的时候,执行jobs就不会发现刚才的job的编号了。但是job脚本会继续执行,直到完成脚本的内容。
[root@centos1152 ~]# jobs #不会发现刚才的job的编号了
[root@centos1152 ~]#
另外:没有使用nohup的单独的&时可以让命令后台运行的,但是如果ssh会话断掉,&的命令也会自动退出。
例如:
[root@centos1152 ~]# /root/cp11.sh > cp11.log & #如果ssh会话突然断开的话,这个脚本就中断执行。
B、screen让程序后台执行——一个强大的工具
简单来说,Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。Screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。在screen中创建一个新的窗口有这样几种方式:
1.直接在命令行键入screen命令
[root@centos1152 ~]# screen
Screen将创建一个执行shell的全屏窗口。你可