服務器上如何更保險的啓動普通java進程

在服務器上啓動普通java進程時(非web服務器) 之後臺方式運行,命令通常是這樣,如:java

java com.company.XXX &

但偶爾會有這種狀況,前一晚啓動的進程,次日去服務器上看時發現卻沒有相關進程存在。
linux

做爲一個無神論者,固然不相信是見鬼了。 諮詢運維同事得知應該是退出SSH終端致使。web

任務在什麼狀況下會被無端幹掉呢?你退出終端的時候就會。由於Linux下任務是與操做者終端關聯的,只要你退出了終端,與其關聯的全部任務都會被幹掉。
shell

(摘自Linux就是這個範兒 P62)服務器

以下所示:app

$ 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, 它能保證被它啓動的任務脫離與終端的關聯。以下所示:spa

$ 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這個文件中。code

補充:orm

還能夠利用screen,如:

screen -dmLS processName com.company.XXX

這時至關於開啓了一個新的會話來啓動該java進程。


參考文檔:

《Linux 就是這個範兒》2.4.1 執行程序的方法,以及多任務協調機制

screen 介紹:

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

相關文章
相關標籤/搜索