CentOS 不间断会话(ssh关闭后如何保证程序继续运行)(nohup和screen)

当使用ssh与远程主机的会话被关闭时,在远程主机上运行的命令也随之被中断。

就是ssh 打开以后,bash等都是他的子程序,一旦ssh关闭,系统将所有相关进程杀掉!! 导致一旦ssh关闭,执行中的任务就取消了。

守护进程不受此影响, 因为守护进程比较特殊, 不属于sshd这个进程组 而是单独的进程组,所以就算关闭了ssh,和他也没有任何关系。

解决办法:

1、使用nohup命令来运行程序

[[email protected] ~]$ nohup /opt/elasticsearch-6.5.1/bin/elasticsearch
nohup: 忽略输入并把输出追加到"nohup.out"

或者
[[email protected] ~]$ nohup /opt/elasticsearch-6.5.1/bin/elasticsearch &
[1] 3370
[[email protected] ~]$ nohup: 忽略输入并把输出追加到"nohup.out"
#使用tail -f来查看输出信息
[[email protected] ~]$ tail -f nohup.out
[2019-01-21T11:45:19,625][INFO ][o.w.a.d.Monitor          ]
。。。 。。。

nohup命令比较简单,只能做到把程序放入后台运行,并且ssh关闭后不中断,无法实施查看运行情况(除了看nohup.out),无法进行人机交互操作。

如果要实现这些,中断ssh后,重新连上还能继续操作,则需要screen这个软件。

2、screen 是一款能够实现多窗口远程控制的开源服务程序,简单来说就是为了解决网络异常中断或为了同时控制多个远程终端窗口而设计的程序。

用户还可以使用 screen 服务程序同时在多个远程会话中自由切换和共享会话。

2.1、安装

检查一下REPO里cdrom的配置

[[email protected] yum.repos.d]# cat CentOS-Media.repo
# CentOS-Media.repo
#
#  This repo can be used with mounted DVD media, verify the mount point for
#  CentOS-7.  You can use this repo and yum to install items directly off the
#  DVD ISO that we release.
#
# To use this repo, put in your DVD and use it with the other repos too:
#  yum --enablerepo=c7-media [command]
#
# or for ONLY the media repo, do this:
#
#  yum --disablerepo=\* --enablerepo=c7-media [command]

[c7-media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS/
        file:///media/cdrom/
        file:///media/cdrecorder/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

挂载centos7镜像来安装

[[email protected] yum.repos.d]# mkdir -p /media/cdrom

[[email protected] yum.repos.d]# mount /dev/cdrom /media/cdrom
mount: /dev/sr0 写保护,将以只读方式挂载

[[email protected] yum.repos.d]# yum install screen

已安装:
  screen.x86_64 0:4.1.0-0.25.20120314git3c2946.el7                                                               

完毕!
[[email protected] yum.repos.d]# screen --help

2.2、恢复session

[[email protected] ~]# screen -ls
No Sockets found in /var/run/screen/S-root.

#创建一个session,名字es,屏幕一闪,实际已经进入screen
[[email protected] ~]# screen -S es

[[email protected] ~]# screen -ls
There is a screen on:
        3846.es (Attached)
1 Socket in /var/run/screen/S-root.
#执行ping,然后直接关闭ssh窗口
[[email protected] ~]# ping 192.168.1.103
PING 192.168.1.103 (192.168.1.103) 56(84) bytes of data.
64 bytes from 192.168.1.103: icmp_seq=1 ttl=128 time=0.648 ms
#重新登录ssh,使用screen -ls查看,有session是detached
[[email protected] ~]# screen -ls
There is a screen on:
    3846.es    (Detached)
1 Socket in /var/run/screen/S-root.
#恢复窗口,ping一直在运行
[[email protected] ~]# screen -r 3846.es

... ...
64 bytes from 192.168.1.103: icmp_seq=83 ttl=128 time=0.904 ms
64 bytes from 192.168.1.103: icmp_seq=84 ttl=128 time=1.07 ms
64 bytes from 192.168.1.103: icmp_seq=85 ttl=128 time=0.773 ms
64 bytes from 192.168.1.103: icmp_seq=86 ttl=128 time=1.26 ms
^C
--- 192.168.1.103 ping statistics ---
86 packets transmitted, 86 received, 0% packet loss, time 85134ms
rtt min/avg/max/mdev = 0.467/1.051/4.810/0.535 ms

打exit退出screen
[screen is terminating]

也可以不手动创建session,直接使用screen 命令执行要运行的命令,这样在命令中的一切操作也都会被记录下来,当命令执行结束后 screen 会话也会自动结束。

这种情况下,session名字是系统自动创建的。

[[email protected] ~]$ screen /opt/elasticsearch-6.5.1/bin/elasticsearch

断开ssh后,重新查看
[[email protected] ~]$ screen -ls
There is a screen on:
    4104.pts-0.localhost    (Detached)
1 Socket in /var/run/screen/S-es.

用kill命令杀掉elasticsearch后,screen自动终止

2.3、共享session

原文地址:https://www.cnblogs.com/asker009/p/10298114.html

时间: 2024-10-27 01:54:40

CentOS 不间断会话(ssh关闭后如何保证程序继续运行)(nohup和screen)的相关文章

ssh 关闭后仍保持当前运行的进程

ssh 关闭后仍保持当前运行的进程 由于各种原因,需要通过ssh登录linux或者unix主机,很多时候我们需要通过ssh的终端启动一 些服务或者运行一些程序,但是默认情况下,当我们关闭ssh终端连接,随之启动的程序也会关闭.原因是:SSH会话关闭时,ssh所关联的pty关闭,系 统会给这个pty所关联的session中的所有进程发送SIGHUP信号,SIGHUP的默认信号处理程序是终止进程,除非进程自己处理了 SIGHUP. 解决方法如下: 使用现成的命令nohup,可以让指定的程序在pty关

如何实现SSH断开后 进程仍然在后台运行

1.nohup命令功能:不挂断地运行命令,忽略HUP信号.语法:nohup command & 实例:nohup ping www.google.com & 转自: http://blog.csdn.net/v1v1wang/article/details/6855552 2. 使用screen等..

Linux关闭终端(或者关闭SSH等)后运行的程序自动停止

问题描述: 之前在服务器上起一个python的服务,放到后台运行. python pyserver.py &.  当我关闭这个SSH之后,该服务不可用,再次登入到服务器,已经没有这个python进程啦. 问题定位: 通过上面问题的表象,可以发现是跟SSH关闭有关.为什么ssh关闭,会导致正在运行的程序死掉.通过查看相关的资料,发现真正的元凶是SIGHUP信号导致的. 在linux中,有下面几个概念: 进程组: 一个或多个进程的集合,每一个进程组都有唯一一个进程组ID,即进程组会话器: 一个或多个

如何让linux程序在ssh shell关闭后继续运行?

我们经常会碰到一种情况,用ssh远程登录到linux服务器后,启动一个脚本跑任务,如果这个任务耗时比较久,就得等着,如果此时由于网络原因,ssh连接断了,再重新登录服务器,原来的任务就没了,得重新运行一次.有没有办法让任务切到后台,ssh退出后还能继续运行呢? 当然有-,而且很简单: 1. 在ssh shell中运行脚本,比如我运行一个批量下载脚本: python download-app-annie.py 2. 按下ctrl-z中断脚本运行,此时系统提示: ^Z [1]+  Stopped  

centos改文字界面,SSH方式后还需要密码登录解决方案

一.centos改文字界面 1,命令模式 systemctl set-default multi-user.target 2,图形模式 systemctl set-default graphical.target 二.SSH方式后还需要密码登录解决方案 问题 设置ssh免密码登陆的时候,发现有一些机器设置不生效.有一些机器正常. 跟踪 登陆目标机器,查看sshd的日志信息.日志信息目录为,/var/log/secure你会发现如下字样的日志信息.Jul 22 14:20:33 v138020.g

linux后台运行程序(secureCRT断掉或关闭后继续运行程序)

secureCRT断掉后想继续运行程序.也就是程序会在后台一直执行到结束. secureCRT通过ssh联接到client端运行程序,如果关掉窗口或者断开连接时,任务会被kill. 为了程序能够后台执行到结束: 1.可以用&: 比如 python test.py 改成 python test.py & 来调用执行. 2.另外,还有一种方式:通过ctrl+z.bg等一系列的命令,将已经在前台运行的作业放到后台执行: 如果一个作业已经在前台执行,可以通过ctrl+z将该作业放到后台并挂起.然后

centos 6.4 修改ssh默认端口22为其他端口详尽安全教程(包含SELinux,iptables设置)

该教程是目前最安全的教程,如果你是新手请严格按照教程的步骤进行,如果是有一定基础的人可以选择性跳过某些段落 修改端口配置 先运行 vim /etc/ssh/sshd_config 找到#Port 22 这行然后去掉前面的注释,然后再下面加一行 Port 1234 Port 22 Port 1234 很多教程是直接修改22为其他端口,最好不要这样做,万一修改的端口不能用,你就完全登陆不上了,所以先留一条后路 修改防火墙配置 修改iptables(linux 的防火墙)文件: vim /etc/sy

CentOS 6.5下SSH总提示Warning: Permanently added '****' (RSA) to the list of known hosts.

通过了免密码验证后,但每次ssh或者scp的时候还总是提示: Warning: Permanently added '***(IP)' (RSA) to the list of known hosts. 虽然可以正常免密码远程连接成功,但是总有这个提示很多余. 如果想关掉,可以看下配置文件/etc/ssh/ssh_config: 找到         StrictHostKeyChecking no          UserKnownHostsFile /dev/null 如果这两个参数没注释

centos 切换语言 开启ssh

centos: yum install ssh  安装SSH service sshd start  启动SSH chkconfig sshd on 设置开机运行 设置语言: centos默认的语言编码是“zh_CN.UTF-8”,这在X-Window桌面环境下的“终端”窗口操作是能正确显示汉字的,但如果是通过SSH或Telnet等方式进行远程管理,就会发现所有的汉字变成乱码了. 1>.要解决这个问题,编辑文件 /etc/sysconfig/i18n,将第1句“LANG="zh_CN.UT