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

測試完成后關閉服務器重啟,模擬斷電后重啟服務器,查看開機后是否自動啟動:

