使用finalshell、xshell等工具连接远程Linux系统运行Java项目,退出工具时服务也关闭了
昨晚同事问我一个问题,使用finals hell连接远程Linux服务器部署spring boot服务时,关闭连接服务也断开了,问我什么原因我们正常情况下在本地Windows系统中部署服务,是在cmd窗口下使用 java -jar xx.jar命令部署运行。此时我们的窗口未关闭,服务就会一直运行,窗口关闭,服务也就关闭了。同样的原理,我们使用远程工具与服务器建立连接时,其实相当于是一个命令窗口,正
昨晚同事问我一个问题,使用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&
更多推荐
所有评论(0)