`
memorymyann
  • 浏览: 271037 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SSH远程启动服务的问题

阅读更多

 

SSH是我们最长用的远程连接linux服务器的工具了,安全可靠也很好用。昨天同学就碰到了个问题,他用SSH链接远程的linux服务器,启动 tomcat,然后关闭了SSH,发现tomcat也被关闭了。他怎么也链接不上TOMCAT服务器,我以前也碰到过类似的问题,我以前是用系统守护进程 cron搞定的。仔细的思考了下,SSH是一个进程(一句废话),那么我们在SSH中启动TOMCAT,这个被启动的TOMCAT进程自然属于他的子进程,我用PS查看了下,证实了我的想法

 

4 S     0  3105  2071 30  75   0 -  1810 -      ?        00:00:31 sshd

4 S     0  3107  3105  0  76   0 -  1395 wait   pts/1    00:00:00 bash

0 S     0  3143  3107 13  75   0 -   352 write_ pts/1    00:00:06 print

我没有用tomcat做例子,因为我的机器上没有装,print进程是个死循环。那为什么在关闭SSH后,tomcat会被关闭,我想应该和SSH进程有关,应该是在ssh进程的代码里写上了,在他关闭时候杀死所有属于自己的子进程。(linux本身不是这么做的)

 

 

在学习了进程管理后,我想到一个办法解决这个问题,我们在启动SSH后,用SSH启动一个进程,再由这个进程去启动我们需要的服务进程,比如tomcat,然后这个父进程不等待子进程执行完毕,就终止了,那么我想服务进程就会被委托给init进程,这样在我们关闭ssh时候,被启动的服务进程和这个init 进程就没有任何关系,自然就不会被关闭。为了看看能不能够实现,我写了段代码测试了下:

 

[root@liumengli wait]# cat test_wait.c

#include "stdio.h"

#include <sys/types.h>

#include <sys/time.h>

#include <sys/resource.h>

#include <sys/wait.h>

 

int main() {

        int child;

        int * status;

        struct rusage  * rus;

        char * argu[] = {"/program/wait/print", NULL};

        if(!(child = vfork())) {

                execve("/program/wait/print", argu, NULL);

        }

        exit(0);

}

[root@liumengli wait]# cat print.c

#include "stdio.h"

 

int main() {

        int i;

        while(1);

        exit(1);

}

[root@liumengli wait]# ./test_wait

 

[root@liumengli wait]# ps -le

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD

4 S     0     1     0  0  76   0 -   436 -      ?        00:00:02 init

1 S     0     2     1  0  94  19 -     0 ksofti ?        00:00:00 ksoftirqd/0

 

......

 

4 S     0  3147  3145  0  75   0 -  1395 wait   pts/3    00:00:00 bash

0 R     0  3308     1 99  85   0 -   351 -      pts/3    00:00:03 print

4 R     0  3309  3147  0  76   0 -  1379 -      pts/3    00:00:00 ps

从代码我们看到test_wait进程启动了print进程,然后test_wait退出,print就被委托给了init进程,这样我们如果关闭ssh呢,我在关闭了ssh后,去虚拟机里面查看了下进程,下面是输出结果

0 R     0  3308     1 99  85   0 -   351 -      pts/3    00:00:03 print

这样我们可以看出print进程没有被退出,为了方便大家使用,我写好了程序和编译后的a.out文件,以及使用说明,大家可以下载下去使用。

 

分享到:
评论

相关推荐

    SSH远程连接linux服务器工具

    标题中的"SSH远程连接linux服务器工具"指的是使用SSH协议来远程访问Linux服务器的软件工具。SSH协议提供了身份验证和加密功能,确保了用户与服务器之间的通信不会被窃听或篡改。这对于管理和维护远程服务器尤其重要...

    buildroot开发板搭建ssh远程登录服务

    标题中的“buildroot开发板搭建ssh远程登录服务”是指在基于Buildroot构建的嵌入式Linux系统中,通过OpenSSH服务器实现远程登录控制台的功能。嵌入式环境下的SSH允许开发者在没有物理访问设备的情况下,通过网络进行...

    ubuntu的SSH远程登陆

    ### Ubuntu的SSH远程登录知识点详解 #### 一、前言 在现代的IT环境中,SSH(Secure Shell)作为一项重要的安全协议,被广泛应用于不同主机之间的远程管理与数据传输。Ubuntu作为一种流行的Linux发行版,其SSH远程...

    SSH 无法启动的原因分析及解决方法1

    当 SSH 服务无法正常启动时,可能由多种原因引起。以下是一些常见的报错情况及其解决方案: 1. **文件权限问题**: 报错信息:`/var/empty/sshd must be owned by root and not group or world-writable.` 这个...

    如何开启Ubuntu SSH远程登录

    标题“如何开启Ubuntu SSH远程登录”涉及到的是在Ubuntu操作系统中启用Secure Shell (SSH)服务,以便进行远程登录和管理。SSH是一种加密网络协议,用于在不安全的网络上安全地执行命令行操作。以下是关于这一主题的...

    Centos通过SSH远程桌面登录

    Centos 通过 SSH 远程桌面登录 Centos 通过 SSH 远程桌面登录是指使用 Secure Shell(SSH)协议连接到 Centos 服务器,并使用远程桌面协议(Remote Desktop Protocol,RDP)访问 Centos 服务器桌面的一种方法。这种...

    CentOS 7设置ssh服务自动启动

    默认情况下,CentOS 7 不会自动启动 `sshd` 服务,这意味着用户无法通过 SSH 远程连接到系统。 #### 查看 OpenSSH 是否已安装 ```bash [root@localhost ~]# rpm -qa | grep ssh libssh2-1.4.3-10.el7.x86_64 ...

    闪电登录——SSH远程Linux服务器.pdf

    "闪电登录——SSH远程Linux服务器.pdf" 本文主要介绍了两部分内容:一是 Linux 系统中实现自动加载优盘的技巧;二是使用 SSH 远程登录 Linux 服务器的方法。 Linux 中的自动加载优盘 在 Linux 系统中,也可以实现...

    使用VSCode+SSH远程连接主机/服务器,从而解决多人共用一台主机,然而只有一套显示设备的不足

    【使用VSCode+SSH远程连接主机/服务器】的教程旨在帮助深度学习和其他需要共享高性能计算资源的用户,解决多人共用一台主机时由于只有一个显示设备而产生的协作问题。通过VSCode的远程开发功能,可以实现在本地...

    centos 6.5下安装、配置并启动SSH远程访问

    CentOS 6.5 下安装、配置并启动 SSH 远程访问 在本文中,我们将详细讲解 CentOS 6.5 下安装、配置并启动 SSH 远程访问的步骤。我们将从检查 SSH 是否安装开始,到设置 SSH 服务为开机启动,最后使用 Xshell 客户端...

    SSH远程登录linux

    SSH(Secure Shell)是一种网络协议,用于在不安全的网络上提供安全的远程登录和其他服务。在Linux系统中,SSH是管理员和用户进行远程管理、文件传输等操作的常用工具。Windows用户通常会借助第三方软件来实现SSH...

    shell脚本远程启动其他服务器的tomcat传输文件自动登录判断启动停止

    这个"shell脚本远程启动其他服务器的tomcat传输文件自动登录判断启动停止"的方案,就是一种典型的自动化运维实践,它结合了多个核心工具和技术,包括shell脚本、expect、ssh以及scp,用于实现远程服务器管理与文件...

    SUSE Linux Enterprise Server 设置防火墙开启ssh远程端口

    ### SUSE Linux Enterprise Server 设置防火墙开启SSH远程端口 #### 一、开启SSH远程端口 在SUSE Linux Enterprise Server (SLES) 中,为了确保系统的安全性,默认情况下防火墙会阻止外部对某些端口(如SSH端口22...

    Linuxssh登录远程服务器 expect

    在IT行业中,Linux系统是广泛应用于服务器管理的操作系统,而SSH(Secure Shell)则是一种用于在不安全网络中提供安全远程登录和其他服务的协议。当我们需要自动化执行远程服务器上的任务时,`expect`工具就显得尤为...

    SSH 远程连接运行图形界面程序.pdf

    在 Putty 中,需要添加组、添加用户、修改 `etc\sshd_config` 文件的选项,然后启动服务。 在 SecureCRT 中,需要打开菜单栏的选项—》会话选项,然后选择“远程/X11”,勾选“转发 X11 数据包”。 五、常见问题 ...

    MacLinux无密码ssh客户端,一键登录远程服务器。一个SSH远程客户端,可一键登录远程服务器.zip

    在描述中提到了“一个SSH远程客户端”,这通常指的是像PuTTY、Terminal(MacOS)或Gnome Terminal(Linux)这样的应用程序,它们允许用户通过SSH连接到远程服务器。这里的“无密码ssh客户端”可能是指配置了SSH密钥...

Global site tag (gtag.js) - Google Analytics