昨晚同事问我一个问题,使用finals hell连接远程Linux服务器部署spring boot服务时,关闭连接服务也断开了,问我什么原因

        我们正常情况下在本地Windows系统中部署服务,是在cmd窗口下使用   java -jar  xx.jar

命令部署运行。此时我们的窗口未关闭,服务就会一直运行,窗口关闭,服务也就关闭了。

同样的原理,我们使用远程工具与服务器建立连接时,其实相当于是一个命令窗口,正常启动服务运行服务是可以的,关闭连接也就相当于关闭了窗口,自然也就是关闭了服务。

解决方法:

我们使用如下命令,即可解决。nohup代表不挂断运行命令,&代表后台运行

nohup java -jar xx.jar &

以上这种情况,当用 nohup 命令执行作业时,缺省情况下该服务的所有输出被重定向到nohup.out的文件中即不会在控制台打印出来

以下这种就是我使用nohup命令指定打印到log.txt文件中

nohup java -jar xx.jar >log.txt &

关闭后台运行的服务并重新部署服务:

平常的项目升级和版本迭代,需要不断更新jar包并重新部署。那么既然这样可以在后台不挂断运行了,如何才能关闭服务呢并重新部署呢。

关闭原进程:

①进入你所存放的jar包位置,输入 ps -aux   可以查看当前运行的服务 。找到你要关闭的jar包服务名称,查看其PID号,即进程号。

ps -aux

②输入 kill -9  要关闭的PID号              结束进程。 

kill -9 PID号

删除原jar包文件:

输入  rm xx.jar       删除原始版本。出现 rm:是否删除普通文件 “xx.jar”?      在后面输入yes

rm xx.jar

上传新jar包文件:

输入 rz    从本地选取文件上传到服务器中 (使用crtl+l键可以清除窗口内容)

部署新服务:

写到这里突然想起以前刚实习的时候接手的一个项目,当时给的一给部署文档,里面让使用

nohup java -jar xx.jar >null 2>&1&

部署服务可以后台运行。当时是个小白,就只管按照文档一步一步来部署,现在再想原来很多知识其实我早就在不知不觉中运用了,只是当时不求甚解,这更加坚定我写博客记录日常学习的想法。

不过这里的后面接的是 >null 2>&1&    这又是什么意思呢

这里经过我一番查找资料发现一篇文章讲的非常透彻:

linux下详解shell中>/dev/null 2>&1 - 哪是什么大佬 - 博客园

我在这里概括一下:

文件描述符

当执行shell命令时,会默认打开3个文件,每个文件有对应的文件描述符来方便我们使用:

类型文件描述符默认情况对应文件句柄位置
标准输入(standard input)0从键盘获得输入/proc/self/fd/0
标准输出(standard output)1输出到屏幕(即控制台)/proc/self/fd/1
错误输出(error output)2输出到屏幕(即控制台)/proc/self/fd/2

>符号代表重定向

2>&1,将错误输出绑定到标准输出上,相当于此时的1 =1+2。由于此时的标准输出是默认值,也就是输出到屏幕,所以错误输出会输出到屏幕。
>null,将标准输出1重定向到一个名称为null的文件中,即窗口屏幕不显示标准输出内容。

所以我当时用的这个命令,代表  在后台不挂断运行jar包服务,并且在命令窗口不显示正确和错误的输出信息。

nohup java -jar xx.jar >null 2>&1&

Logo

更多推荐