centos-springbootプロジェクトの導入(起動スクリプトの作成、起動開始スクリプトの作成、デーモンプロセスの起動2つのスクリプトの作成を含む)

6920 ワード

一、環境
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を使用して実行を解釈することを意味し、ブログ<>を参照してください.
2、実行権限を開く
オートスターに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 &

ここではいくつかの小さな細部の問題に注意します:<>
バックグラウンド実行スクリプト
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