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