需求:制作一個可選擇的jar包重啟腳本,由於我這邊的jar包在docker內,所以有些復雜,僅做參考
#!/bin/bash source ~/.bashrc echo "----------------------------------" echo -e "\033[35m JAR包名稱序號\033[0m" echo "(1) gateway-two.jar" echo "(0) Exit Menu" echo "----------------------------------" read -p "請輸入要重新啟動的JAR包序列號:" input case $input in 1) echo "開始啟動gateway-two.jar" sleep 1 jar=gateway-two docker exec -it jar bash -c "sed -i '/jar/d' /root/.bashrc" #刪除/root/.bashrc文件的最后一行,以防下面疊加echo時不斷增大 docker exec -it jar bash -c "echo 'export jar=$jar' >> /root/.bashrc" #把變量從宿主機外部傳進docker容器內部
docker exec -i jar bash<<'EOF' source /root/.bashrc #使之前傳進來的變量生效,因為下面會用到 pid=`ps -ef|grep ${jar}.jar|grep -v grep|awk '{print $2}'` #獲取jar程序PID號 cd /vrgv/jar/2.0/$jar/ if [ -n "${pid}" ];then kill -9 ${pid} echo "Process $jar killed!" nohup java -jar -Xms265M -Xmx512M ${jar}.jar > /vrgv/jar/2.0/logs/${jar}.log 2>&1 & echo "ReStart $jar Success!" else nohup java -jar -Xms265M -Xmx512M ${jar}.jar > /vrgv/jar/2.0/logs/${jar}.log 2>&1 & echo "Start $jar Success!" fi exit EOF ;; 0) exit;; esac
執行流程:
1.輸入jar包序列號
2.傳變量進docker容器內部
3.判斷jar程序是否存在,存在就殺死重新啟動,不存在則直接啟動
效果圖: