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
原文地址:https://www.cnblogs.com/foolash/p/13824647.html