告別Java -Jar啟動!告訴你啟動單機(jī)SpringBoot服務(wù)的正確操作方式
一、安裝Java運(yùn)行時環(huán)境,這里我們使用開源免費(fèi)的OpenJDK11
查看OpenJDK11安裝包列表
yum list|grep java-11-openjdk
執(zhí)行安裝命令。
yum install -y java-11-openjdk.x86_64
查看安裝成功的版本。
[root@localhost ~]# java -version
openjdk version "11.0.21" 2023-10-17 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.21.0.9-1.el7_9) (build 11.0.21+9-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.21.0.9-1.el7_9) (build 11.0.21+9-LTS, mixed mode, sharing)
設(shè)置JAVA_HOME。
通過命令查找java安裝的真實(shí)路徑,使用which java找到的是軟鏈接,需要通過ll命令一層層查找真實(shí)路徑,我們這邊最終/usr/bin/java真實(shí)的路徑為 /usr/lib/jvm/java-11-openjdk-11.0.21.0.9-1.el7_9.x86_64/bin/java,那么我們的JAVA_HOME就是java的安裝目錄/usr/lib/jvm/java-11-openjdk-11.0.21.0.9-1.el7_9.x86_64,去掉 末尾的 /bin/java 。
[root@localhost ~]# which java
/usr/bin/java
[root@localhost ~]# ll /usr/bin/java
lrwxrwxrwx 1 root root 22 Jan 2 16:13 /usr/bin/java -> /etc/alternatives/java
[root@localhost ~]# ll /etc/alternatives/java
lrwxrwxrwx 1 root root 64 Jan 2 16:13 /etc/alternatives/java -> /usr/lib/jvm/java-11-openjdk-11.0.21.0.9-1.el7_9.x86_64/bin/java
[root@localhost ~]# ll /usr/lib/jvm/java-11-openjdk-11.0.21.0.9-1.el7_9.x86_64/bin/java
-rwxr-xr-x 1 root root 13192 Nov 15 00:51 /usr/lib/jvm/java-11-openjdk-11.0.21.0.9-1.el7_9.x86_64/bin/java
編輯/etc/profile文件,添加JAVA_HOME配置,并使用source /etc/profile命令使環(huán)境配置生效,不需要配置CLASS_APTH, rt.jar, tools.jar。
vi /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.21.0.9-1.el7_9.x86_64
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
二、編寫啟動、停止SpringBoot服務(wù)的Shell腳本
定義運(yùn)行服務(wù)需要的參數(shù),服務(wù)名稱、服務(wù)程序路徑、日志文件等,這里可以感覺自己的需要來定義,包括可以添加java -jar的運(yùn)行參數(shù)等。
#!/bin/bash
APP_NAME="gitegg-application.jar" # 命令號提示服務(wù)名
APP_PATH="/opt/server/gitegg-application.jar" # jar包文件路徑
LOG_FILE="/opt/server/gitegg-application.log" # 日志輸出文件路徑,一般我們服務(wù)會記錄日志,如果不想在這里輸出,那么可以填寫 /dev/null
定義命令腳本運(yùn)行提示,如果輸入的命令格式錯誤,這里可以給出正確的命令格式等。
#使用說明,提示輸入?yún)?shù)
usage() {
echo "Usage: sh start_server.sh [start|stop|restart|status]"
exit 1
}
定義檢查服務(wù)是否正在運(yùn)行的函數(shù)。
#檢查服務(wù)是否正在運(yùn)行
is_running(){
pid=`ps -ef|grep $APP_PATH|grep -v grep|awk '{print $2}' `
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
定義啟動服務(wù)的函數(shù)。
#啟動服務(wù)
start(){
is_running
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
nohup java -jar $APP_PATH > $LOG_FILE 2>&1 &
fi
}
定義停止服務(wù)的函數(shù)。
#停止服務(wù)
stop(){
is_running
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
}
定義查看服務(wù)運(yùn)行狀態(tài)的函數(shù)。
#顯示運(yùn)行狀態(tài)
status(){
is_running
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}
定義服務(wù)重啟函數(shù)。
#重啟服務(wù)
restart(){
stop
start
}
腳本接收參數(shù),根據(jù)參數(shù)執(zhí)行對應(yīng)的命令函數(shù)。
#選擇要運(yùn)行的命令
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
設(shè)置腳本執(zhí)行權(quán)限,填寫自己腳本文件的實(shí)際路徑。
chmod +x /opt/server/start_server.sh
完整的執(zhí)行腳本如下:
#!/bin/bash
APP_NAME="gitegg-application.jar" # 命令號提示服務(wù)名
APP_PATH="/opt/server/gitegg-application.jar" # jar包文件路徑
LOG_FILE="/opt/server/gitegg-application.log" # 日志輸出文件路徑,一般我們服務(wù)會記錄日志,如果不想在這里輸出,那么可以填寫 /dev/null
#使用說明,提示輸入?yún)?shù)
usage() {
echo "Usage: sh start_server.sh [start|stop|restart|status]"
exit 1
}
#檢查服務(wù)是否正在運(yùn)行
is_running(){
pid=`ps -ef|grep $APP_PATH|grep -v grep|awk '{print $2}' `
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#啟動服務(wù)
start(){
is_running
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
nohup java -jar $APP_PATH > $LOG_FILE 2>&1 &
fi
}
#停止服務(wù)
stop(){
is_running
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
}
#顯示運(yùn)行狀態(tài)
status(){
is_running
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}
#重啟服務(wù)
restart(){
stop
start
}
#選擇要運(yùn)行的命令
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
三、編寫啟動、停止SpringBoot服務(wù)的Shell腳本
在CentOS中的服務(wù)是由systemd管理的,可以通過systemctl命令進(jìn)行服務(wù)運(yùn)行的相關(guān)操作。
新增管理服務(wù)gitegg-server.service,服務(wù)名稱可以自己定義,此服務(wù)放到 /lib/systemd/system/ 目錄。
vi /lib/systemd/system/gitegg-server.service
編寫服務(wù)內(nèi)容。
[Unit]
Description=gitegg-server
After=docker.socket early-docker.target network.target
Wants=network-online.target docker.service
Requires=docker.socket
[Service]
Type=forking
ExecStart=/opt/server/start_server.sh start
ExecStop=/opt/server/start_server.sh stop
ExecSatus=/opt/server/start_server.sh status
ExecRestart=/opt/server/start_server.sh restart
[Install]
WantedBy=multi-user.target
保存并重新加載配置。
systemctl daemon-reload
設(shè)置服務(wù)開機(jī)啟動。
systemctl enable gitegg-server.service
可以直接使用systemctl 命令操作服務(wù)。
# 啟動服務(wù)
systemctl start gitegg-server.service
# 關(guān)閉服務(wù)
systemctl stop gitegg-server.service
# 查看服務(wù)狀態(tài)
systemctl status gitegg-server.service
# 重啟服務(wù)
systemctl restart gitegg-server.service