关于服务部署的程序会被杀死的解决方案
遇到的问题
今天部署项目的时候,发现如果在xshell远程服务器,折行jar包后关闭xshell,运行的java程序也会被杀死,也试过加上&符号,也没用。百度了一下,原来是服务器厂商设定的为了不让资源消耗的机制。当然他们也提供了以下几种解决方案!
使用nohup执行
解释
nohup可以使后面的命令不会响应挂断(SIGHUP)信号。也就是说,通过远程登录执行nohup命令后,即使退出登录后,程序还是会正常执行。通常情况下,nohup命令最后会跟上&字符,表示将这个命令放至后台执行,这样才能真正做到将这个命令放至后台持续的执行。
使用
例如本来是java -jar xxx.jar,现在是nohub java -jar xxx.jar &
那么这样,服务器上的程序就会在后台运行了,不会触发消除机制。
如果不行请尝试下面的方法
使用nohup java -jar XXX.jar >temp.txt &,即先创建一个xxx.txt的文件,将jar包的打印输出输入到txt中。
使用screen执行
Linux系统默认没有screen工具,需要先进行安装。
安装方法
CentOS系列系统安装命令:yum install screen
Ubuntu 系列系统安装命令:sudo apt-get install screen
screen使用方法
创建screen窗口,折行命令:screen -S name,name是自己起的窗口名字,可以随便起
折行完创建窗口命令后,会进入一个新的窗口,现象就是之前的折行命令的文字效果被清空了
然后你就可以在这个新的窗口折行你要的操作了,即运行程序
然后退出这个窗口的命令是:先按ctrl+a,然后按d
退出后刚刚折行的程序还是会在后台折行,即使关闭了连接也会运行,不会被杀死。
若想回到刚刚的窗口,折行命令:screen -r -d
列出在执行的screen窗口,执行命令:screen -ls,会列出所有运行中带有pid的窗口名
折行screen -r pid,就可以回到指定的窗口,pid指的是screen -ls列出的指定窗口的pid
关闭指定的窗口进程(杀死)screen -S 进程名 -X quit