springboot
專案部署在CentOS
系統上時,如果遇到停電關機,公司的實施人員就得跑到甲方現場重新啟動專案並測試,很是麻煩,這裡探討如何編寫shell
指令碼控制springboot
專案開機時自動啟動;
不正之處,請不吝賜教!
以eureka
的jar
包為例子:
上傳Jar包
將eureka
的jar
包上傳至/usr/local/eureka
目錄下:
編寫shell啟動指令碼
進入/usr/local/eureka
目錄,執行以下命令,建立並編輯eureka.sh
啟動指令碼:
vi eureka.sh
內容如下,其中APP_PATH
為jar
包所在目錄, APP_NAME
為jar
包的位置,JAVA_JDK
為jdk
的安裝目錄,LOG_NAME
為jar
包啟動後日志輸出位置,其他地方不需要修改:
#!/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
測試完成後關閉伺服器重啟,模擬斷電後重啟伺服器,檢視開機後是否自動啟動: