Linux 啟動、停止、重啟jar包腳本;查看java進程執行文件所在目錄/具體位置(多文件夾同名jar包)


文件名稱

startOrStropJar.sh

腳本

#!/bin/bash


#這里可替換為你自己的執行程序,其他代碼無需更改

APP_NAME=xxxxxx.jar
#使用說明,用來提示輸入參數
usage() {
    echo "Usage: sh startOrStropJar.sh [start|stop|restart|status]"
    exit 1
}

#檢查程序是否在運行
is_exist(){
  pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`
  #如果不存在返回1,存在返回0     
  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
    rm nohup.out
    nohup java -jar ${APP_NAME}  --spring.profiles.active=[dev/test/prod] 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
  sleep 5
  start
}

#根據輸入參數,選擇執行對應方法,不輸入則執行使用說明
case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  *)
    usage
    ;;
esac

 * 紅色部分

--spring.profiles.active=[dev/test/prod] 需要指定為項目自身配置 如:--spring.profiles.active=mytest
# 啟動/停止/重啟
sh startOrStropJar.sh start/stop/restart

備注:

war包需要部署到容器中,運行jar包主要有以下四種方式。

一、java -jar XXX.jar

這是最基本的jar包執行方式,但是當我們用ctrl+c中斷或者關閉窗口時,程序也會中斷執行。

二、java -jar XXX.jar &

&代表在后台運行,使用ctrl+c不會中斷程序的運行,但是關閉窗口會中斷程序的運行。

三、nohup java -jar XXX.jar &

使用這種方式運行的程序日志會輸出到當前目錄下的nohup.out文件,使用ctrl+c中斷或者關閉窗口都不會中斷程序的執行。

四、nohup java -jar XXX.jar >test.log &

日志輸出到test.log文件。每次重啟覆蓋原有日志,追加日志 使用 >>test.log

查看java進程執行文件所在目錄/具體位置(多文件夾同名jar包)

 方法1.找出PID去/proc文件夾找對應PID的exe、cwd目錄位置

查看java進程執行文件所在目錄/具體位置(多文件夾同名jar包)

ps -ef | grep xxx 找出進程ID

Linux 在啟動一個進程的時候,系統會在 /proc 下創建一個以 PID 命名的進程信息的文件夾。

查看方式:ll /proc/PID 或 ls -l /proc/PID

cwd 符號鏈接的是進程運行目錄;

exe 符號鏈接的是執行程序的絕對路徑;

cmdline:程序運行時輸入的命令

方法2.使用fuser

首先要進入部署服務的目錄,然后可以使用fuser找出進程。

如: fuser none.jar

若啟動的是該目錄下文件,則會列出詳細目錄

結果:/home/xxx/none.jar :    1234m(PID)

fuser

使用文件或文件結構識別進程

補充說明

fuser命令 用於報告進程使用的文件和網絡套接字。fuser命令列出了本地進程的進程號,那些本地進程使用file,參數指定的本地或遠程文件。對於阻塞特別設備,此命令列出了使用該設備上任何文件的進程。

每個進程號后面都跟隨一個字母,該字母指示進程如何使用文件。

  • c:指示進程的工作目錄。
  • e:指示該文件為進程的可執行文件(即進程由該文件拉起)。
  • f:指示該文件被進程打開,默認情況下f字符不顯示。
  • F:指示該文件被進程打開進行寫入,默認情況下F字符不顯示。
  • r:指示該目錄為進程的根目錄。
  • m:指示進程使用該文件進行內存映射,抑或該文件為共享庫文件,被進程映射進內存。

語法

fuser(選項)(參數)

選項

-a:顯示命令行中指定的所有文件; -k:殺死訪問指定文件的所有進程; -i:殺死進程前需要用戶進行確認; -l:列出所有已知信號名; -m:指定一個被加載的文件系統或一個被加載的塊設備; -n:選擇不同的名稱空間; -u:在每個進程后顯示所屬的用戶名。 

參數

文件:可以是文件名或者TCP、UDP端口號。

實例

要列出使用/etc/passwd文件的本地進程的進程號,請輸入:

fuser /etc/passwd

要列出使用/etc/filesystems文件的進程的進程號和用戶登錄名,請輸入:

fuser -u /etc/filesystems


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM