1. 程式人生 > >linux自動部署jar包,註冊系統服務(基於Centos7)

linux自動部署jar包,註冊系統服務(基於Centos7)

最近一直在搞伺服器,現在要執行我們的程式,都是jar包的格式,但是每次輸入執行命令都很麻煩,現在進行放入指令碼啟動或者註冊服務啟動,來簡化啟動,但是這個方法也有一定的缺陷,需要一定的標準規範才可以正確執行,比如jar包的打包名稱一定要和指令碼中的名稱一樣

下面進入正題,首先來指令碼啟動

說一下前提,根據自己的需求修改相應的路徑

1. jar包路徑 /usr/local/docpc
2. jar包名稱 doctor-pc-0.0.1-SNAPSHOT.jar
3. java路徑 /usr/bin/java

新建啟動指令碼
指令碼啟動的日誌會在jar包目錄下生成

# vim start.sh

指令碼內容如下


#啟動命令所在目錄
HOME='/usr/local/docpc'
start(){
  #進入命令所在目錄
  cd $HOME
  nohup sudo /usr/bin/java -jar doctor-pc-0.0.1-SNAPSHOT.jar > doctor-pc-0.0.1-SNAPSHOT.jar.log 2>&1 &
}
stop(){
  #kill 掉所有java程式
  ps -ef | grep doctor-pc-0.0.1| grep -v grep |awk '{print $2}' | xargs sudo kill -9
}
case $1 in
  start)
   start
  ;;
  stop)
   stop
  ;;
  restart)
   $0 stop
   sleep 2
   $0 start
  ;;
  *)
   echo "Usage: {start|stop|restart}"
  ;;
esac

exit 


啟動

./start.sh start

關閉

./start.sh stop

重啟

./start.sh restart 

至此指令碼啟動完成,在jar包的同等級目錄下會生成日誌

下面來講一下把jar包的啟動註冊到系統服務並新增到開機自啟

jar包路徑 /usr/local/docpc/
  1. 進入 /lib/systemd/system
# cd /lin/systemd/system
  1. 新建 docpc.service
# vim docpc.service
  1. docpc.service內容如下
[Unit]

Description=docpc
After=network.target


[Service]


ExecStart=/usr/bin/java -jar /usr/local/docpc/doctor-pc-0.0.1-SNAPSHOT.jar
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop= ps -ef | grep doctor-pc-0.0.1| grep -v grep |awk '{print $2}' | xargs sudo kill -9
[Install]

WantedBy=multi-user.target

  1. 給docpc.service加檔案許可權
# chmod 777 docpc.service
  1. 啟動服務
# systemctl start docpc.service
  1. 關閉
# systemctl stop docpc.service
  1. 重啟
# systemctl restart docpc.service
  1. 加入開機自啟
# systemctl enable docpc.service
  1. 關閉開機自啟
# systemctl disable docpc.service

到此,jar包的系統服務設定完成,指令碼啟動和註冊系統是兩個不同的啟動方式,各位可以把啟動指令碼放入開機自動也可實現指令碼的開機啟動,這裡就不說了,大家可以去Google一下。註冊系統服務的時候本人也是想可以輸出一下日誌的,但是嘗試不成功,各位如果有建議可以留言,本人虛心受教,至於windows版的jar包啟動可以關注本人的另一篇windows啟動jar包指令碼的部落格