一剩拢、實(shí)驗(yàn)背景
作為java程序員,經(jīng)常會(huì)遇到這樣一個(gè)問題够话,打個(gè)jar包蓝翰,測(cè)試或者上線生產(chǎn),于是乎面臨的選擇來(lái)了女嘲,java –jar or nohup畜份?
有時(shí)一個(gè)程序需要長(zhǎng)時(shí)間運(yùn)行,但如果重啟機(jī)器欣尼,沒人手動(dòng)啟動(dòng)軟件時(shí)爆雹,就沒有辦法運(yùn)行起來(lái)。最好的辦法是能實(shí)現(xiàn)程序開機(jī)自啟動(dòng)愕鼓。
二钙态、實(shí)驗(yàn)環(huán)境
操作系統(tǒng):CentOS7.5 Minimal
IP: 192.168.1.106
JRE版本:jre8u221
三、安裝jre環(huán)境
Java服務(wù)的的運(yùn)行菇晃,依賴于java虛擬機(jī)册倒,所以運(yùn)行java服務(wù)前,我們需要先安裝jre磺送,JAVA運(yùn)行環(huán)境驻子。
# rpm -e --nodeps $(rpm -qa | grep -i openjdk)
# tar? zxvf? jre-8u221-linux-x64.tar.gz? ? -C? ? /opt
# echo? 'JAVA_HOME="/opt/jre1.8.0_221"'? > /etc/profile.d/jre.sh
# source? /etc/profile.d/jre.sh
# echo "export PATH=$JAVA_HOME/bin:$PATH" >>? /etc/profile.d/jre.sh
# source? /etc/profile.d/jre.sh
# java -version
四灿意、測(cè)試幾種服務(wù)運(yùn)行方式
我們用 HelloWorldWeb-0.0.1-SNAPSHOT.jar 這個(gè)測(cè)試jar包來(lái)測(cè)試幾種服務(wù)運(yùn)行方式。
啟動(dòng)這個(gè)服務(wù)崇呵,將能在頁(yè)面顯示 Hello World! 效果缤剧。
# firewall-cmd --zone=public? --add-port=8080/tcp --permanent
# firewall-cmd --reload
#? mkdir? /opt/test
# cp? HelloWorldWeb-0.0.1-SNAPSHOT.jar? /opt/test
1.? ? #? java? -jar? HelloWorldWeb-0.0.1-SNAPSHOT.jar? --server.port=8080
瀏覽器訪問:http://192.18.1.106:8080
啟動(dòng)信息直接顯示在控制臺(tái),按 CRTL+C 域慷,程序中斷荒辕。
2.? #? java? -jar? HelloWorldWeb-0.0.1-SNAPSHOT.jar? --server.port=8080? &
# ps aux | grep java
啟動(dòng)信息直接顯示在控制臺(tái),按 CRTL+C 犹褒,程序后臺(tái)運(yùn)行抵窒,重啟主機(jī)化漆,程序中斷估脆。
3.? #? nohup? java? -jar? HelloWorldWeb-0.0.1-SNAPSHOT.jar? --server.port=8080? &
? ? #? tail? -f? nohup.out
hangup (掛斷)钦奋,終端退出時(shí)會(huì)發(fā)送 hangup 信號(hào)來(lái)通知其關(guān)閉所有子進(jìn)程
nohup(不掛斷座云,忽略掛斷信號(hào))
nohup 的使用是十分方便的,只需在要處理的命令前加上 nohup 即可付材,標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤缺省會(huì)被重定向到 nohup.out 文件中朦拖。
一般我們可在結(jié)尾加上"&"來(lái)將命令同時(shí)放入后臺(tái)運(yùn)行,也可用">>filename2>&1"來(lái)更改缺省的重定向文件名厌衔。
#? nohup? java? -jar? HelloWorldWeb-0.0.1-SNAPSHOT.jar? --server.port=8080? &? >> /var/log/test.log
4. 將java服務(wù)注冊(cè)成系統(tǒng)服務(wù)
編寫封裝腳本
# vim? /opt/test/test.sh
###########################################################################################
#!/bin/bash
export JAVA_HOME="/opt/jre1.8.0_221"
export PATH=$PATH:$JAVA_HOME/bin
server_port=8080
nohup java -jar /opt/test/HelloWorldWeb-0.0.1-SNAPSHOT.jar --server.port=${server_port} &? > /var/log/test.log
##############################################################################################
編寫系統(tǒng)服務(wù)的service文件
#######################################################
[Unit]
Description=Java test service
After=network.target
[Service]
Type=forking
ExecStart=/bin/bash /opt/test/test.sh
ExecStop=/bin/kill -s QUIT $MAINPID
PidFile=/var/run/test.pid
[Install]
WantedBy=multi-user.target
##########################################################
# systemctl daemon-reload
# systemctl start? test.service
# systemctl enable? test.service
# systemctl status? test.service
# tail? -f /var/log/test.log
五璧帝、參考
如何實(shí)現(xiàn) java -jar 程序的開機(jī)自啟?
http://www.reibang.com/p/d49e19b91698
CentOS7設(shè)置tomcat7為系統(tǒng)服務(wù)的方法
https://blog.csdn.net/fall10/article/details/52469712
一分鐘了解nohup和&的功效
https://blog.csdn.net/shenjian58/article/details/89850426
https://segmentfault.com/a/1190000014653953?utm_source=tag-newest