編寫shell指令碼讓springboot專案在CentOS中開機自啟動

蒲公英不是夢發表於2021-04-28

springboot專案部署在CentOS系統上時,如果遇到停電關機,公司的實施人員就得跑到甲方現場重新啟動專案並測試,很是麻煩,這裡探討如何編寫shell指令碼控制springboot專案開機時自動啟動;

不正之處,請不吝賜教!

eureka的jar包為例子:

上傳Jar包

eurekajar包上傳至/usr/local/eureka目錄下:

編寫shell啟動指令碼

進入/usr/local/eureka目錄,執行以下命令,建立並編輯eureka.sh啟動指令碼:

vi eureka.sh

內容如下,其中APP_PATHjar包所在目錄, APP_NAMEjar包的位置,JAVA_JDKjdk的安裝目錄,LOG_NAMEjar包啟動後日志輸出位置,其他地方不需要修改:

#!/bin/bash
#自定義內容
APP_PATH=/usr/local/eureka
APP_NAME=/usr/local/eureka/eureka-server-1.0.0.jar
JAVA_JDK=/usr/local/jre1.8.0_202
LOG_NAME=/usr/local/eureka/eurekaLog.log
#執行命令有誤時,提示使用說明引數
usage() {
 echo "Usage: sh eureka.sh [start|stop|restart|status]"
 exit 1
}

#檢查程式是否已經在執行
is_exist(){
 pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
if [ -z "${pid}" ]; then
 return 1
 else
 return 0
 fi
}

#啟動服務
start(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is already running. pid=${pid} ."
  else
    nohup $JAVA_JDK/bin/java -Duser.dir=$APP_PATH -jar $APP_NAME > $LOG_NAME 2>&1 &
  fi
}

#停止服務
stop(){
  is_exist
  if [ $? -eq "0" ]; then
    kill -9 $pid
  else
    echo "${APP_NAME} is not running"
  fi
}

#輸出服務執行狀態
status(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is running. Pid is ${pid}"
  else
    echo "${APP_NAME} is NOT running."
  fi
}

#重啟服務
restart(){
  stop
  start
}

#根據輸入引數,選擇執行對應的方法,不輸入則執行使用說明
case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  *)
    usage
    ;;
esac

編寫完儲存並退出,執行以下命令啟動eureka服務,測試啟動指令碼是否正常:

#故意執行不完整的命令,測試是否提示使用說明
sh eureka.sh
#啟動服務
sh eureka.sh start
#檢視服務狀態
sh eureka.sh status
#停止服務
sh eureka.sh stop
#重啟服務
sh eureka.sh restart

測試無誤後,停止服務,執行以下命令,設定eureka指令碼的可執行許可權:

chmod a+wrx -R eureka

執行完之後,檔名稱變綠色:

編寫開機自啟動配置

執行以下命令,在/usr/lib/systemd/system目錄下建立並編輯eureka.service配置檔案:

vi /usr/lib/systemd/system/eureka.service

內容如下:

其中ExecStart定義了啟動程式時要執行的命令,ExecReload定義重啟服務時要執行的命令,ExecStop定義停止程式時要執行的名稱,這些命令統統指向剛剛建立並測試通過的eureka.sh啟動指令碼;

[Unit]
Description=eureka
After=network.target
  
[Service]
Type=forking
ExecStart=/usr/local/eureka/eureka.sh start
ExecReload=/usr/local/eureka/eureka.sh restart
ExecStop=/usr/local/eureka/eureka.sh stop
PrivateTmp=true
  
[Install]
WantedBy=multi-user.target

編寫完儲存並退出,通過systemctl命令啟動eureka服務,測試啟動指令碼是否正常:

#檢視執行狀態
systemctl status eureka
#啟動
systemctl start eureka
#關閉
systemctl stop eureka
#重啟
systemctl restart eureka
#檢視配置檔案內容
systemctl cat eureka

啟動完之後,預設是沒有啟動開機自啟動的;

通過以下命令設定開機自啟動:

systemctl enable eureka

測試完成後關閉伺服器重啟,模擬斷電後重啟伺服器,檢視開機後是否自動啟動:

相關文章