服务器上如何更保险的启动普通java进程
博客专区 > zgw06629 的博客 > 博客详情
服务器上如何更保险的启动普通java进程
zgw06629 发表于2年前
服务器上如何更保险的启动普通java进程
  • 发表于 2年前
  • 阅读 42
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

在服务器上启动普通java进程时(非web服务器) 以后台方式运行,命令一般是这样,如:

java com.company.XXX &

但偶尔会有这种情况,前一晚启动的进程,第二天去服务器上看时发现却没有相关进程存在。

作为一个无神论者,当然不相信是见鬼了。 咨询运维同事得知应该是退出SSH终端导致。

任务在什么情况下会被无故干掉呢?你退出终端的时候就会。因为Linux下任务是与操作者终端关联的,只要你退出了终端,与其关联的所有任务都会被干掉。

(摘自Linux就是这个范儿 P62)

如下所示:

$ java WaitForever &
[1] 8951
$ jps -l
8951 WaitForever
9001 sun.tools.jps.Jps
#通过ctrl+shift+w方式关闭终端
#再新开启一个终端(ctrl+shift+t)
#在新终端中 进程已经不在了
$ jps -l
9523 sun.tools.jps.Jps

但若显式执行exit退出终端的话,可以避免上述问题。如下所示:

$ java WaitForever &
[1] 10603
$ jps -l
10626 sun.tools.jps.Jps
10603 WaitForever
$ exit
#新开启一个终端 
$ jps -l
10885 sun.tools.jps.Jps
10603 WaitForever


当然可以用更保险的启动进程方式,即使用nohup, 它能保证被它启动的任务脱离与终端的关联。如下所示:

$ nohup java WaitForever &
[1] 11895
nohup: ignoring input and appending output to ‘nohup.out’
$ jps -l
11936 sun.tools.jps.Jps
11895 WaitForever
#使用ctrl+shift+w关闭终端
#新开启一个终端 进程还在
$ jps -l
11895 WaitForever
12574 sun.tools.jps.Jps

需要注意,命令的所有输出都会输出到nohup.out这个文件中。

补充:

还可以利用screen,如:

screen -dmLS processName com.company.XXX

这时相当于开启了一个新的会话来启动该java进程。


参考文档:

《Linux 就是这个范儿》2.4.1 执行程序的方法,以及多任务协调机制

screen 介绍:

http://www.ibm.com/developerworks/cn/linux/l-cn-screen/


标签: screen nohup
共有 人打赏支持
粉丝 14
博文 54
码字总数 30471
×
zgw06629
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: