有些時候運行一個java項目在linux下通過一條簡單的java命令即可,如:
#nohup java -jar jenkins.war & ###這里為后台運行jenkins
在此背景下,java進程因各種原因導致進程被kill。或者主動結束進程忘記開啟。程序不會自動啟動起來。
可以考慮將其做成systemd服務,當進程掛掉之后會自動啟動起來
1.環境介紹(目錄結構)
### 實驗環境為一台機器運行多個jar包或者war包,且包存放在/opt/sdk目錄下。且有啟動和關閉腳本,logs日志目錄
╭─◆root@ localhhost opt/sdk
╰─># ll
total 335684
-rw-r--r-- 1 www www 34698758 Mar 1 18:08 DibDirector.jar
-rw-r--r-- 1 www www 44491920 Mar 1 12:29 DibFinance.jar
-rw-r--r-- 1 www www 34686621 Mar 1 12:28 DibGovernance.jar
-rw-r--r-- 1 www www 49526812 Nov 6 20:31 DibManage.jar
-rw-r--r-- 1 www www 74093277 Nov 6 20:29 DibResource.jar
-rw-r--r-- 1 www www 23007795 Nov 5 17:14 DibSdk.jar
-rw-rw-r-- 1 www www 34484128 Mar 18 23:08 DibShares.jar
-rw-r--r-- 1 www www 48724992 Mar 1 12:28 DibSign.jar
drwxrwxr-x 2 www www 168 Mar 22 09:33 logs/
-rwxrwxr-x 1 www www 219 Mar 18 23:09 start.sh*
-rwxrwxr-x 1 www www 89 Nov 6 13:44 stop.sh*
2.啟動腳本通過傳遞的第一個參數決定啟動哪一個jar包
╰─># cat start.sh
#!/bin/bash
export JAVA_HOME=/opt/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
CMD_PATH="/opt/sdk"
sdk=$1
#cd $CMD_PATH
java -jar ${CMD_PATH}/${sdk}.jar > ${CMD_PATH}/logs/${sdk}.log &
echo $! > $CMD_PATH/logs/${sdk}.pid
3.關閉腳本通過傳遞的第一個參數關閉某一個jar程序
╰─># cat stop.sh
#!/bin/bash
CMD_PATH="/opt/sdk"
sdk=$1
PID=$(cat $CMD_PATH/logs/${sdk}.pid)
kill -9 $PID
4.此處以DibDirector.jar為例:新建DibDirector.service文件
╰─># cat /etc/systemd/system/DibDirector.service
# Systemd unit file for tomcat
[Unit]
Description=Dibcn SDK application
After=syslog.target network.target
[Service]
Type=forking
Environment=JAVA_HOME=/opt/local/jdk
ExecStart=/opt/sdk/start.sh DibDirector
ExecStop=/opt/sdk/stop.sh DibDirector
PrivateTmp=true
User=www
Group=www
UMask=0007
RestartSec=5
Restart=always
[Install]
WantedBy=multi-user.target
5.將其開機設置為開機啟動
╰─># systemctl enable DibDirector.service
6.備注
1.啟動和關閉腳本必須賦予執行權限
2.例子用戶權限全部為www用戶,即為www用戶啟動服務
3.不同情況可根據此筆記適當修改,即可使用