轉載自:https://blog.csdn.net/slqgenius/article/details/85778578
一,原由
因為使用 nohup 和 & 這種方式啟動jar包的話,只會放在后台里面執行,如果某天,人為或機器故障等原因,觸發重啟了。那樣程序就會關閉,不清楚系統的人,可能都不知道這個需要啟動。
所以,這里使用Centos7系統自帶的systemctl管理實現一個開啟自動管理
二,創建系統文件
# 路徑一定要寫清楚,systemctl要根據這個來編寫
vim /etc/init.d/zuul
#zuul文件的內容
-
-
PID_PATH=/var/run/zuul-service.pid
-
Service_Name=zuul-service
-
-
case "$1" in
-
start)
-
/zuul-service/zuul-start.sh
-
;;
-
stop)
-
kill $(cat ${PID_PATH})
-
rm ${PID_PATH}
-
;;
-
restart)
-
$0 stop
-
$0 start
-
;;
-
status)
-
if [ -e ${PID_PATH} ];then
-
echo "${Service_Name} is running, pid=$(cat ${PID_PATH})"
-
else
-
echo "${Service_Name} is NOT running"
-
exit 1
-
fi
-
;;
-
*)
-
echo "Usage: $0 {start|stop|status|restart}"
-
esac
-
-
exit 0
#賦予執行權限
chmod a+x /etc/init.d/zuul
三,創建啟動腳本
vim /zuul-service/zuul-start.sh
#zuul-start文件的內容
-
-
#啟動命令
-
/usr/bin/java -jar /zuul-service/rocket-zuul-0.0.1-SNAPSHOT.jar >> /zuul-service/zuul.log 2>&1 &
-
#將pid寫進文件
-
echo $! > /var/run/zuul-service.pid
#賦予執行權限
chmod a+x /zuul-service/zuul-start.sh
四,將服務添加進systemctl進行管理
vim /usr/lib/systemd/system/zuul.service
#zuul.service文件的內容
-
[Unit]
-
Documentation=zuul-service
-
-
[Service]
-
User=root
-
Group=root
-
Type=forking
-
Restart=no
-
KillMode=process
-
ExecStart=/etc/rc.d/init.d/zuul start
-
ExecStop=/etc/rc.d/init.d/zuul stop
-
-
[Install]
-
WantedBy=multi-user.target
#啟動zuul
systemctl daemon-reload
systemctl enable zuul
systemctl start zuul
-
CentOS7自定義系統服務
-
-
CentOS7的服務systemctl腳本存放在: /usr/lib/systemd/,有系統(system)和用戶(user)之分,需要開機不登陸就能運行的程序,存在系統服務里,即:/usr/lib/systemd/system目錄下.
-
CentOS7的每一個服務以.service結尾,一般會分為 3部分:[Unit]、[Service]和[Install]
-
-
[Unit]部分主要是對這個服務的說明,內容包括Description和After,Description 用於描述服務,After用於描述服務類別
-
-
-
[Service]部分是服務的關鍵,是服務的一些具體運行參數的設置.
-
-
# 設置服務運行的用戶
-
User=users
-
-
# 設置服務運行的用戶組
-
Group=users
-
-
# 設置進程的啟動類型
-
Type=forking
-
-
# 服務重啟策略
-
Restart=no
-
-
# 殺掉進程的策略
-
KillMode=process
-
-
# 服務的具體運行命令
-
ExecStart
-
-
# 停止命令
-
ExecStop
-
-
# 重置命令
-
ExecReload
-
-
# 存放PID的文件路徑,
-
PIDFile
-
-
# 環境變量
-
Environment= "JAVA_HOME=/usr/local/jdk1.8.0_181"
-
-
# 表示給服務分配獨立的臨時空間
-
PrivateTmp=True
-
-
注意:[Service]部分的啟動、重啟、停止命令全部要求使用絕對路徑,使用相對路徑則會報錯!
五、systemctl管理命令
#設置開機自啟
systemctl enable zuul
#關閉開機自啟
systemctl disable zuul
#啟動服務
systemctl start zuul
#停止服務
systemctl stop zuul
#重啟服務
systemctl restart zuul
#查看服務狀態
systemctl status zuul
#檢查開機自啟狀態
systemctl is-enabled zuul