首页 > 系统相关 >Linux重启Java的.sh脚本shell

Linux重启Java的.sh脚本shell

时间:2023-05-11 13:11:31浏览次数:41  
标签:shell grep PID Agent sh 进程 Java

原文链接:https://blog.csdn.net/weixin_44821965/article/details/130039771

前言
最近看到了项目中重启Java服务的.sh文件,对sh文件里面的命令产生了好奇,于是研究了一下脚本里面每一个命令的具体意义

一、.sh文件内容
.sh文件里面的内容如下:

ps-ef | grep plugins-web | grep -v grep | awk '{print "kill -9" $2}' | sh nohup java -javaagent:/apps/aaagent/apm-javaagent.jar -jar ./RESOURCE_NAME7--
appllo.env=sit--appllo.accesskey = 1111--appllo.bootstrap.namespaces=RDSystem.application >.nohup-plugs.out 2>&1 &
1
2
这个脚本命令很长,具体的含义如下
1、ps -ef: 这个命令会列出所有正在运行的进程。

2、grep plugins-web: 这个命令会在上一步的输出结果中,查找包含 “plugins-web” 的进程。

3、grep -v grep: 这个命令会过滤掉上一步输出结果中包含 “grep” 的行,以防止误杀其他进程。

4、awk ‘{print “kill -9” $2}’: 这个命令会使用 awk 工具从上一步输出的进程信息中提取出进程的 PID(进程ID),并生成一个 kill 命令,以杀死该进程。其中 $2 表示第二个字段,即进程的 PID。

5、sh: 这个命令会将上一步生成的 kill 命令传递给 shell 执行。

6、nohup java -javaagent:/apps/aaagent/apm-javaagent.jar -jar ./RESOURCE_NAME7–appllo.env=sit–appllo.accesskey=1111–appllo.bootstrap.namespaces=RDSystem.application >.nohup-plugs.out 2>&1 &:这个命令会启动一个新的 Java 进程。其中:

6.1 nohup: 这个命令会使进程忽略挂起信号(SIGHUP),并将标准输出和标准错误输出重定向到文件 “.nohup-plugs.out” 中。这意味着即使用户退出了当前会话,该进程也会继续运行。

6.2 java: 这个命令会启动 Java 虚拟机。

6.3 -javaagent:/apps/aaagent/apm-javaagent.jar: 这个选项会指定 Java 应用程序监控代理的路径。

6.4 -jar ./RESOURCE_NAME7–appllo.env=sit–appllo.accesskey=1111–appllo.bootstrap.namespaces=RDSystem.application: 这个选项会指定要运行的 Java 应用程序的 JAR 文件和应用程序参数。

6.5 >.nohup-plugs.out 2>&1 &: 这个命令会将标准输出和标准错误输出重定向到文件 “.nohup-plugs.out” 中,并使进程在后台运行。

-javaagent的含义
-javaagent 是 Java 虚拟机启动参数之一,它用于指定一个 Java 应用程序监控代理(Java Agent)。Java Agent 是一个特殊的 Java 应用程序,它能够在 JVM 运行期间与应用程序一起运行,并可以访问和修改 JVM 的内部状态。Java Agent 可以用于实现各种功能,如性能分析、代码注入、错误监控、安全检查等。

使用 -javaagent 参数启动 Java 应用程序时,Java 虚拟机会在启动时加载指定的 Java Agent,并调用它的 premain 方法。premain 方法是 Java Agent 的入口方法,它可以用于初始化 Java Agent,注册钩子函数(Hook Function),或者在 JVM 启动时执行一些操作。当 Java 应用程序结束时,Java 虚拟机会调用 Java Agent 的 agentmain 方法,该方法可以用于执行一些清理操作或者监视应用程序运行期间的状态。

通常情况下,使用 Java Agent 可以帮助开发人员更好地了解和优化 Java 应用程序的性能,识别潜在的问题和瓶颈,并提供一些高级的功能和服务。在实际使用中,Java Agent 通常作为第三方库或工具的一部分提供,例如 Java 应用程序性能分析工具、代码注入框架、错误监控系统等。

二、自己编写重启Java进程的脚本
编写重启Java项目的Shell脚本,需要考虑以下几个方面:
1、检查Java进程是否存在,如果存在则需要杀掉进程。

2、检查日志文件是否存在,如果存在则需要备份。

3、启动Java进程。

4、检查Java进程是否启动成功,如果没有则需要进行相应处理。

示例

#!/bin/bash

# 定义Java进程的名称
APP_NAME=your-app-name.jar

# 定义Java进程的日志文件路径
LOG_PATH=/var/log/your-app-name.log

# 定义备份日志文件的目录
BACKUP_DIR=/var/log/backup

# 定义Java进程的启动参数
JAVA_OPTS="-Xmx1024m -Xms1024m -XX:MaxPermSize=256m"

# 检查Java进程是否存在
PID=$(ps -ef | grep ${APP_NAME} | grep -v grep | awk '{print $2}')
if [[ -n ${PID} ]]; then
echo "Java process is running, PID is ${PID}. Killing..."
kill -9 ${PID}
fi

# 检查日志文件是否存在
if [[ -f ${LOG_PATH} ]]; then
echo "Log file exists. Backing up..."
if [[ ! -d ${BACKUP_DIR} ]]; then
mkdir ${BACKUP_DIR}
fi
cp ${LOG_PATH} ${BACKUP_DIR}/$(date +%Y%m%d%H%M%S).log
echo "Log file backed up to ${BACKUP_DIR}."
fi

# 启动Java进程
nohup java ${JAVA_OPTS} -jar ${APP_NAME} > ${LOG_PATH} 2>&1 &

# 检查Java进程是否启动成功
sleep 10
PID=$(ps -ef | grep ${APP_NAME} | grep -v grep | awk '{print $2}')
if [[ -n ${PID} ]]; then
echo "Java process started successfully, PID is ${PID}."
else
echo "Failed to start Java process."
fi

该脚本中的APP_NAME、LOG_PATH和BACKUP_DIR需要根据实际情况进行修改。JAVA_OPTS可以根据需要添加或修改Java进程的启动参数。

具体在Linux系统上创建.sh脚本
vi shart.sh

vim创建.sh文件,按 i 进去到插入模式,编辑文本后,ESC 退出插入模式,按 : 输入指令,wq保存退出,q直接退出。

创建完后的文件暂时还不能运行,需要先赋予权限

chmod 755 shart.sh

755具体是:文件所有者获得 读写执行 权限(7),文件所有者的同用户组其他用户获得 读执行 权限(5),其他用户获得 读执行 权限。

执行权限(1)

写权限(2)

读权限(4)

./start.sh

执行脚本

总结
本篇博客介绍重启java进程的脚本以及如何编写重启Java项目的Shell脚本。

标签:shell,grep,PID,Agent,sh,进程,Java
From: https://www.cnblogs.com/fswhq/p/17376541.html

相关文章

  • Java---内部类
    Java---内部类内部类的概念内部类就是一个类内部包含另一个类分类:成员内部类局部内部类(包含匿名内部类)格式:修饰符class外部类名称{修饰符class内部类名称{//}}注意:内用外,随意访问;外用内,需要内部类对象.代码示例publicclassBody{privateSt......
  • 微服务架构 & service mesh
    微服务架构,服务治理怎么做,采用什么技术?微服务架构实施服务治理的方法和技术:容器化:Docker+Kubernetes服务注册发现:ZooKeeper、Consul、Etcd负载均衡:HAProxy、Nginx、AmazonELBAPI网关:Kong、ShenYu,中大厂一般自研监控和日志:ELKStack、Prometheus、Grafana分布式跟......
  • Java8相对于Java7新增了什么新特性
    Java8和Java7是两个不同的Java版本,Java8相对于Java7引入了相当多的新特性,以下是Java8相对于Java7新增的重要特性:Lambda表达式:Lambda表达式是Java8最重要的特性之一,它提供了一种简洁的编写匿名函数的方式,有助于编写更加易读和简单的代码。函数式接口和......
  • 【Java】Stream的一些日常操作
    1  前言 Java8出来的stream写法让我们对数据的处理带来了一些写法上的增进,这节就简单记录下平时使用的stream的一些操作,关于stream的书籍,可以看一下Java8实战,里边会有两三章讲解我们的stream。2 常用记录 //根据单个属性或者多个属性去重List<Object>data......
  • java线程池和多线程的使用详解
    Java多线程和线程池使用java多线程实现的几种方法1.继承Thread类继承Thread类,重写run方法,创建线程类对象调用start方法启动线程。publicclassThreadDemo{/***继承Thread类创建线程*/publicstaticclassMyThreadextendsThread{publ......
  • python基础学习-hashlib - 哈希函数模块
    hashlib-哈希函数模块参考地址:Python-Core-50-Courses/第20课:Python标准库初探.mdatmaster·jackfrued/Python-Core-50-Courses(github.com)待补充......哈希函数又称哈希算法或散列函数,是一种为已有的数据创建“数字指纹”(哈希摘要)的方法。哈希函数把数据压缩成摘要,对......
  • Qt QTimer::singleShot问题及用法
    问题描述问题描述:QTimer::singleShot定时器事件超时,如果此时类内对象已经被回收,定时器事件调用已经释放的类内资源时会引起崩溃1voidfunc()2{3QTimer::singleShot(50,[=](){4this->continueNodeTask();5});6}78/*9如果singleShot事......
  • freeSSHd
    下载http://www.freesshd.com/?ctt=download 设置IP与端口设置服务器目录创建访问用户 权限开启服务  常见错误: a.服务器被占用:应该停止该服务genericerrorforaccessviolation ......
  • 【Java】Java 继承
    继承继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。<理解:继承就是子类继承父类的特征和行为,即子类从父类继承方法,使得子类具有父类相同的行为。> 示例: 父类packagecom.ext;publicclassDe......
  • Qt QTimer::singleShot用法
    [static]voidQTimer::singleShot(intmsec,constQObject*receiver,constchar*member)这个静态函数在一个给定时间间隔msec(毫秒)之后调用一个槽。用法1:假设类A有个槽函数function(){}我们要在10s之后执行它就可以: QTimer::singleShot(10*1000,this,&A::func......