首页 > 系统相关 >编写linux脚本,监控jar包,内存溢出等报错时,重启程序

编写linux脚本,监控jar包,内存溢出等报错时,重启程序

时间:2024-11-27 16:44:00浏览次数:8  
标签:JAR LOG Jar jar 报错 FILE linux 日志

 

#!/bin/bash

# 定义路径和变量
JAR_PROCESS_NAME="java"
JAR_FILE_PATH="/root/dfsz/jars/gw-dz-core.jar"  # 请确认此路径是你的Jar文件的实际路径
LOG_FILE="/root/dfsz/jars/restartBash.log" #脚本日志文件
FIND_LOG_FILE="/root/dfsz/jars/log.log"  #要查询的日志文件

# 初始化重启次数
RESTART_COUNT=0

# 定义启动 Jar 进程的函数
function start_jar {
    nohup java -Xms8g -Xmx8g -jar $JAR_FILE_PATH --spring.profiles.active=prod_92 > log.log 2>&1 &
    echo -e "[$(date)] Jar process started.\n" >> $LOG_FILE

    # 记录重启次数和时间到重启日志
    RESTART_COUNT=$((RESTART_COUNT + 1))
    echo -e "[$(date)] Jar process restarted. Total restarts: $RESTART_COUNT\n" >> $LOG_FILE
}

# 定义监控 Jar 进程的函数
function monitor_jar {
    while true; do
        # 检查是否有 Java 进程运行
        if ! pgrep -f $JAR_PROCESS_NAME > /dev/null; then
            echo -e "[$(date)] Jar process not found, restarting...\n" >> $LOG_FILE
            start_jar
        fi

        # 检查日志文件中是否包含内存溢出错误
        if grep -q "java.lang.OutOfMemoryError" $FIND_LOG_FILE; then
            echo -e "[$(date)] Detected OutOfMemoryError, restarting jar...\n" >> $LOG_FILE
            pkill -f $JAR_PROCESS_NAME
            start_jar
            # 清空日志文件以避免重复处理相同错误
            #: > $LOG_FILE
        fi
        
        # 检查日志文件中是否包含内存溢出错误
        if grep -q "state should be: open" $FIND_LOG_FILE; then
            echo -e "[$(date)] Detected mongo: state should be: open, restarting jar...\n" >> $LOG_FILE
            pkill -f $JAR_PROCESS_NAME
            start_jar
            # 清空日志文件以避免重复处理相同错误
            #: > $LOG_FILE
        fi

        # 等待10秒再检查
        sleep 30
    done
}

# 启动监控
monitor_jar

 

后台启动脚本

nohup /root/dfsz/jars/restartBash.sh > /dev/null 2>&1 &

 

查看脚本是否启动

ps -ef|grep sh

 

标签:JAR,LOG,Jar,jar,报错,FILE,linux,日志
From: https://www.cnblogs.com/Donnnnnn/p/18572612

相关文章

  • LinuxC高级
    shell中的数组shell支持稀疏数组格式:数组名=(初始值1初始值2...)数组名=([下标]=初始值[下标]=初始值...)下标可以不连续访问数组中的元素${数组名[下标]}-->获取数组中指定下标元素的值获取数组中的所有元素${数组名[*]}--->获取数组中所有元素${数组......
  • LinuxC高级
    gdb调试工具gdb调试的作用gdb用于调试代码中逻辑错误,而非语法错误gdb调试流程生成可以使用gdb调试的执行文件gcc-gxxx.c--->生成的文件可以使用gdb调试进入gdb工具gdb可执行文件--->使用gdb工具开始调试可执行文件r/run:运行代码l/list:显示当前行下面的10行......
  • Arch linux下把chromeOS安装至btrfs子卷
    旧的ChromeOS单独划分一个ext4分区安装,划分的是ChromeOS可用的最大空间,当存储未用满时,这个ChromeOS独占的分区就有很大的浪费。最近Brunch的作者发布了linux安装工具Linuxloops,可以把ChromeOS安装到Btrfs子卷。Linuxloops采用了图形安装界面,不需要提前下载Brunch及ChromeOS镜像。......
  • 腾讯通RTX升级替代方案,兼容移动端及Linux内核国产系统
    一、腾讯通RTX继续使用的主要难题腾讯通RTX自从停止更新并下架官网后,用户无法继续获得更新、技术支持和资源下载。同时面临以下无法从根本解决的问题:●不兼容国产系统与移动端:腾讯通RTX仅支持Windows和Mac系统,无法在基于Linux内核的国产操作系统及移动端设备上正常使用。●组......
  • 【bug记录】PySpark运行报错
    1.问题:PySpark运行时出现乱码问题。问题描述:PySpark运行出现乱码问题如下图所示。1.1解决方法(1):将全局编码从utf-8改为GBK。在Pycharm设置->编辑器->文件编码->全局编码,将全局编码从utf-8改为GBK。11.2解决方法(2):安装Java,配置Java环境变量。步骤:前往ORACLE官......
  • 【Linux】多线程(POSIX信号量、线程池、线程安全)
    ......
  • linux网络启动不成功 systemctl restart networkTob)for network,service failed beca
    一、执行重启网络服务systemctlrestartnetwork然后报错二、执行systemctlstatusnetwork.service查看network服务的运行状态发现是active(exited)退出状态三、使用journalctl-Xe查看systemctl执行命令错误的详细信息发现网卡eth2的配置有问题,无法激活将eth2......
  • Linux ARM GIC仅中断CPU 0问题分析
    1.前言限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。2.分析背景本文分析基于linux-4.19.157内核代码分析3.问题在使用全志H3机器时,观察到一个现象,外设中断总是集中在CPU0处理:#cat/proc/interruptsCPU0CPU1......
  • 龙芯3A4000的linux系统下node14.17.5运行出现Floating point exception(浮点数异常)问
    因项目需要在龙芯下使用node14.17.5执行构建任务,在使用源码编译安装后,执行时出现Floatingpointexception(浮点数异常)问题。经调试发现,其是在使用openssl加载ECC相关证书时使用mips64汇编代码时导致的。在分析相关代码后,将deps下的openssl中的bn_div.c文件的16行进行修改,重新......
  • 【java开发】使用Launch4j将Web应用的Jar包打包成exe
    如果当你在工作中使用Java比较多,有时会碰到将Jar包打包成exe部署在客户电脑上的需求。经过一顿操作猛如虎的网上搜索,最后技术选型选择了Launch4j,就图它开源免费、上手简单。Launch4j是一个跨平台工具,用于将以JAR文件分发的Java应用程序封装为轻量级的Windows原生可执行文......