centos——部署springboot項目(含啓動腳本編寫、開機自啓腳本編寫、守護進程開機二合一腳本編寫)

一、環境

帶jdk、mysql 等。

我的環境

[root@VM_0_3_centos rc.d]# cat /proc/version
Linux version 3.10.0-862.14.4.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP Wed Sep 26 15:12:11 UTC 2018

[root@VM_0_3_centos rc.d]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)


[root@VM_0_3_centos rc.d]# mysql -V
mysql  Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using  EditLine wrapper

 

二、項目啓動腳本編寫

我的實驗項目隨便放在了/root/springbootdemo 文件夾中,編寫 start.sh

RESOURCE_NAME=demo-0.0.1-SNAPSHOT.jar #product name
 
tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Stop Process...'
kill -15 $tpid
fi
sleep 5
tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Kill Process!'
kill -9 $tpid
else
echo 'Stop Success!'
fi
 
tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo 'App is running.'
else
    echo 'App is NOT running.'
fi
 
rm -f tpid
nohup java -jar ./$RESOURCE_NAME &
echo $! > tpid
echo Start Success!

注意:此文件必須和jar文件同級!!

編寫好之後,啓動、重啓等,直接使用 sh start.sh 啓動即可!

三、編寫開機自啓服務

查看開機啓動項   systemctl list-unit-files

1、編寫另外一個啓動文件

vi /root/springbootdemo/autostart.sh

#!/bin/sh
JAVA_HOME=/root/tools/javatool/jdk1.8.0_181
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME PATH
nohup java -jar /root/springbootdemo/demo-0.0.1-SNAPSHOT.jar &

回到 /root/springbootdemo文件夾內,ll (ls -l 縮寫) 查看列表信息,此時的  autostart.sh 爲淺黑色。

執行     ./a   (tab鍵按住)不能自動顯示,說明只有讀寫權限,沒有執行權限。

注意:#!/bin/sh是指此腳本使用/bin/sh來解釋執行,參考博客 <<Linux腳本開頭#!/bin/bash和#!/bin/sh是什麼意思以及區別>>

2、開啓執行權限

 給  autostart.sh  文件最大的執行權限:

 chmod 777 autostart.sh

關於這個 777 是什麼?同事給我做了詳細解答

在linux終端先輸入ll,可以看到如:
-rwx-r--r-- (一共10個參數) 表示文件所屬組和用戶的對應權限。
第一個跟參數屬於管理員,跟chmod無關,先不管.
2-4參數:屬於user
5-7參數:屬於group
8-10參數:屬於others
接下來就簡單了:r==>可讀 w==>可寫 x==>可執行
r=4 w=2 x=1
所以755代表 rwxr-xr-x
777 代表 rwxr-rwx-rwx 所有用戶都可讀可寫可執行。

例如:
-rwxrwxrwx 1 root root      197 Aug  7 20:16 autostart.sh
drwxr-xr-x 2 root root     4096 Aug  7 01:02 LOG_HOME_IS_UNDEFINED

第一個字符  有時是-有時是d  -表示是文件   d表示文件夾

後面的以3個長度進行拆分  rwx  rwx  rwx

rwx 4+2+1=7 表示最大權限7 包含 讀r 寫w 執行x

-rwxrwxrwx 1 root root      197 Aug  7 20:16 autostart.sh 
中的-rwxrwxrwx 表示autostart.sh 是一個文件  
第一組權限爲“讀寫執行”,第二組權限爲“讀寫執行”,第三組權限爲“讀寫執行”

 所以,使用此命令後,將 autostart.sh 權限變更爲  讀、寫、執行,此時顏色爲深黑色,且 ./autostart.sh 可以執行!

3、添加開機啓動項

[root@VM_0_3_centos springbootdemo]# cd /etc/rc.d
[root@VM_0_3_centos rc.d]# ll
total 36
drwxr-xr-x. 2 root root 4096 Oct 18  2018 init.d
drwxr-xr-x. 2 root root 4096 Aug  4  2017 rc0.d
drwxr-xr-x. 2 root root 4096 Aug  4  2017 rc1.d
drwxr-xr-x. 2 root root 4096 Aug  4  2017 rc2.d
drwxr-xr-x. 2 root root 4096 Aug  4  2017 rc3.d
drwxr-xr-x. 2 root root 4096 Aug  4  2017 rc4.d
drwxr-xr-x. 2 root root 4096 Aug  4  2017 rc5.d
drwxr-xr-x. 2 root root 4096 Aug  4  2017 rc6.d
-rwxr-xr-x  1 root root  236 Aug  7 20:31 rc.local

在 rc.local 中添加執行腳本,在原始文件末尾追加

/root/springbootdemo/autostart.sh

後 保存並退出,完整爲

[root@VM_0_3_centos rc.d]# cat rc.local 
#!/bin/sh


/usr/local/qcloud/rps/set_rps.sh >/tmp/setRps.log 2>&1
/usr/local/qcloud/irq/net_smp_affinity.sh >/tmp/net_affinity.log 2>&1
/usr/local/qcloud/gpu/nv_gpu_conf.sh >/tmp/nv_gpu_conf.log 2>&1
/root/springbootdemo/autostart.sh

 其中的  >/tmp/nv_gpu_conf.log 2>&1  表示不保存日誌文件

4、重啓服務器

reboot

5、編寫守護進程腳本

[root@VM_0_3_centos springbootdemo]# vi hopdemo.sh 

#! /bin/sh
pro_name='demo-0.0.1-SNAPSHOT.jar'
while true
 do
  NUM=`ps aux|grep ${pro_name} |grep -v greep|wc -l`
  if [ "${NUM}" -lt "2" ];then
     echo "重啓項目"
     nohup java -jar /root/springbootdemo/demo-0.0.1-SNAPSHOT.jar &
  fi
  
  #暫停時間按照具體的項目啓動時間定義,時間太短,會導致單位時間內多個相同項目啓動
  sleep 10
done
exit 0

其中爲什麼判斷條件中寫入 -lt(小於) 2的判斷

[root@VM_0_3_centos springbootdemo]# ps -ef|grep demo-0.0.1-SNAPSHOT.jar -wc
2

上述命令執行後,返回爲查詢到指定進程的數目信息。當然也可以讓他返回指定有效進程的數目

[root@VM_0_3_centos springbootdemo]# ps aux | grep demo-0.0.1-SNAPSHOT.jar | grep -v grep |wc -l
1

 

6、向開機自啓腳本中,追加守護進程腳本信息

[root@VM_0_3_centos springbootdemo]# vi autostart.sh 

#!/bin/sh
JAVA_HOME=/root/tools/javatool/jdk1.8.0_181
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME PATH
nohup java -jar /root/springbootdemo/demo-0.0.1-SNAPSHOT.jar &

echo "暫停30秒後  執行守護進程的啓動"
sleep 30
# > /root/springbootdemo/hopdemo.txt 表示保存日誌信息至指定文件,方便查看  最後一個&表示後臺執行
nohup sh /root/springbootdemo/hopdemo.sh > /root/springbootdemo/hopdemo.txt &
#或者直接使用下列命令
#nohup sh /root/springbootdemo/hopdemo.sh &

這裏注意幾個小小的細節問題:摘自於<<在linux後臺運行腳本的方法和命令>>

後臺運行腳本

a.執行腳本test.sh:./test.sh
b.中斷腳本test.sh:ctrl+c
c.在a的基礎上將運行中的test.sh,切換到後臺並暫停:ctrl+z
   執行ctrl+z後,test.sh在後臺是暫停狀態(stopped),使用命令:bg number讓其在後臺開始運行(“number”是使用jobs命令查到的 [ ]中的數字,不是pid)

開放shell腳本的讀、寫、可執行權限

[root@VM_0_3_centos springbootdemo]# chmod 777 hopdemo.sh 

7、如果中途我進行了項目更新,需要修改服務器上的項目,有守護進程在,如何能殺掉原來的項目部署新的項目呢?

查詢守護進程的信息,殺掉守護進程

[root@VM_0_3_centos springbootdemo]# ps -ef|grep hopdemo.sh
root      7204  3338  0 11:27 pts/0    00:00:00 sh hopdemo.sh
root     12614  3338  0 12:01 pts/0    00:00:00 grep --color=auto hopdemo.sh
[root@VM_0_3_centos springbootdemo]# kill 3338

查詢項目的進程,殺掉進程

[root@VM_0_3_centos springbootdemo]# ps -ef|grep java
root     19360     1  1 16:06 pts/1    00:00:13 java -jar /root/springbootdemo/demo-0.0.1-SNAPSHOT.jar
root     21515 10834  0 16:23 pts/0    00:00:00 grep --color=auto java
[root@VM_0_3_centos springbootdemo]# kill -9 19360

上傳新的項目文件,重啓守護進程shell腳本

[root@VM_0_3_centos springbootdemo]# sh hopdemo.sh 

 

四、防火牆問題

我自己玩的時候,請求總會失敗,最後分析才知道防火牆沒關。大佬的防火牆操作   鏈接

防火牆部分操作

firewall-cmd --state #查看默認防火牆狀態(關閉後顯示notrunning,開啓後顯示running)
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall開機啓動

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章