Shell 脚本管理 Java 应用程序的高效方法

news2024/9/27 6:06:51

在软件开发中,管理和监控 Java 应用程序的运行状态变得愈加重要。本文将分享一个自用的简单但高效的 Shell 脚本,帮助轻松管理 JAR 包的启动、停止和日志管理。

脚本功能概述

本脚本提供以下主要功能:

  • 检查 JAR 包的运行状态
  • 启动尚未运行的 JAR 包
  • 停止所有运行中的 JAR 包
  • 删除 10 天之前的旧日志,并压缩近期日志
详细代码讲解

以下是脚本的主要部分,我们将逐段分析其实现逻辑。

  1. 创建日志目录

    # 创建日志目录
    [ ! -d "./logs" ] && mkdir ./logs

    此部分确保在脚本运行时创建一个日志目录,以便存储后续生成的日志文件。

  2. 检查进程状态

    check_status() {
        for filename in $filenames; do
            pid=$(ps -ef | grep $filename | grep -v grep | awk '{print $2}')
            if [ -z "$pid" ]; then
                echo "$filename: 该服务未启动"
            else
                echo "$filename: 该服务正在运行 (PID为: $pid)"
            fi
        done
    }
    

    该函数循环遍历当前目录下的所有 JAR 包,使用 ps 命令检查它们的运行状态。如果没有找到相应的 PID,则表示服务未启动。

  3. 日志清理与压缩

    # 删除10天之前的日志文件
    delete_old_logs() {
        find ./logs -type f -name "*.log" -mtime +10 -exec rm {} \;
        echo "已删除10天之前的日志文件"
    }
    
    # 压缩10天内的老日志
    compress_old_logs() {
        find ./logs -type f -name "*.log" -mtime -10 -exec gzip {} \;
        echo "已压缩10天内的老日志文件"
    }

    这两部分负责清理和压缩日志文件,确保日志目录不会占用过多空间,保持整洁。

  4. 停止进程

    stop_all() {
        for filename in $filenames; do
            echo -e "\n------------------------------------------------------"
            echo "尝试优雅停止 $filename 进程"
            ps -ef | grep $filename | grep -v grep | awk '{print $2}' | xargs --no-run-if-empty kill
            sleep 3
            echo "检查是否有未终止的 $filename 进程,强制结束"
            ps -ef | grep java | grep $filename | grep -v grep | awk '{print $2}' | xargs -r kill -9
            echo "$filename 程序已经停止"
        done
    }
    

    stop_all 函数尝试优雅地停止所有进程,如果未能成功,则强制结束它们,确保所有服务都已停止。

  5. 脚本参数处理

    case "$1" in
        status)
            check_status
            ;;
        free)
            for filename in $filenames; do
                ...
            done
            ;;
        stop)
            stop_all
            ;;
        *)
            ...
            ;;
    esac
    

    此部分根据用户输入的参数执行不同的操作,如查看状态、启动或停止服务。

使用示例

要使用该脚本,可以在终端中运行以下命令:

  • 重启所有JAR包:./your_script.sh
  • 查看 JAR 包状态:./your_script.sh status
  • 启动未运行的 JAR 包:./your_script.sh free
  • 停止所有 JAR 包:./your_script.sh stop
注意事项

在运行脚本之前,请确保您拥有足够的权限,并检查脚本中的路径设置,避免权限或路径错误导致的运行失败。

总结

通过这个简单的 Shell 脚本,您可以高效地管理 Java 应用程序的运行状态,确保日志文件的整洁。希望您能根据自己的需求进行修改和扩展,让脚本更符合您的工作流程。

附录完整代码

完整代码:

#!/bin/bash

# 创建日志目录
[ ! -d "./logs" ] && mkdir ./logs

# 获取当前目录下所有的 jar 文件名
filenames=$(ls *.jar)
echo "获取当前目录下所有的 jar 包文件名"

# 定义函数:检查进程状态
check_status() {
    for filename in $filenames; do
        pid=$(ps -ef | grep $filename | grep -v grep | awk '{print $2}')
        if [ -z "$pid" ]; then
            echo "$filename: 该服务未启动"
        else
            echo "$filename: 该服务正在运行 (PID为: $pid)"
        fi
    done
}

# 删除10天之前的日志文件
delete_old_logs() {
    find ./logs -type f -name "*.log" -mtime +10 -exec rm {} \;
    echo "已删除10天之前的日志文件"
}

# 压缩10天内的老日志
compress_old_logs() {
    find ./logs -type f -name "*.log" -mtime -10 -exec gzip {} \;
    echo "已压缩10天内的老日志文件"
}

# 定义函数:停止所有进程
stop_all() {
    for filename in $filenames; do
        echo -e "\n------------------------------------------------------"
        echo "尝试优雅停止 $filename 进程"
        ps -ef | grep $filename | grep -v grep | awk '{print $2}' | xargs --no-run-if-empty kill
        sleep 3
        echo "检查是否有未终止的 $filename 进程,强制结束"
        ps -ef | grep java | grep $filename | grep -v grep | awk '{print $2}' | xargs -r kill -9
        echo "$filename 程序已经停止"
    done
}

# 判断脚本参数
case "$1" in
    status)
        echo "后缀status 查看当前文件夹下所有jar运行状态"
        check_status
        ;;
    free)
        echo "后缀free 启动尚未启动的 jar 包"
        for filename in $filenames; do
            pid=$(ps -ef | grep $filename | grep -v grep | awk '{print $2}')
            if [ -z "$pid" ]; then
                logname=$(basename $filename .jar)
                timestamp=$(date +"%Y%m%d_%H%M%S")
                echo "开始启动 $filename"
                nohup java -server -Xms1024m -Xmx1024m -XX:MetaspaceSize=200m -jar $filename >> ./logs/outlog_${logname}_$timestamp.log 2>&1 &
                echo "启动 $filename 结束,日志输出到 ./logs/outlog_${logname}_$timestamp.log"
            else
                echo "$filename: 已在运行,跳过启动"
            fi
        done
        ;;
    stop)
        stop_all
        ;;
    *)
        echo "进行默认选项,重新启动所有 jar 包(可通过status后缀查看状态、free启动未运行jar服务,stop停止当前目录下所有jar包服务)"
        stop_all
		# 执行日志清理和压缩
		delete_old_logs
		compress_old_logs
        for filename in $filenames; do
            sleep 2
            logname=$(basename $filename .jar)
            timestamp=$(date +"%Y%m%d_%H%M%S")
            echo "开始启动 $filename"
            nohup java -server -Xms1024m -Xmx1024m -XX:MetaspaceSize=200m -jar $filename >> ./logs/outlog_${logname}_$timestamp.log 2>&1 &
            sleep 2
            echo "启动 $filename 结束,日志输出到 ./logs/outlog_${logname}_$timestamp.log"
        done
        ;;
esac


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2169161.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenHarmony(鸿蒙南向)——平台驱动指南【MIPI DSI】

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 持续更新中…… 概述 功能简介 DSI(Display Serial Interface&#x…

防火墙的区域划分+来自公网、内网的ip欺骗攻击+防御

一、适用场景: 1、某些企业的WIFI覆盖不全面的情况下,企业职工想通过自己购置的无线路由器实现使用无线WIFI时,无意间接入无线路由器,导致ip欺骗攻击形成。 2、当企业对某个网段中的某些ip地址,限制其不能连外网&…

玩转指针(3)

一、字符指针变量 字符指针变量(如char* p)的两种赋值方式 ①将字符类型地址赋值给字符指针变量 int main() {char a w;char* p &a;*p m;return 0; }②将常量字符串赋值给字符指针变量 常量字符串的介绍:用" "引起来的就…

【有啥问啥】大型语言模型的涌现能力(Emergent Abilities):新一代AI的曙光

大型语言模型的涌现能力(Emergent Abilities):新一代AI的曙光 随着人工智能技术的飞速发展,大型语言模型(Large Language Model,LLM)展现出了令人惊叹的涌现能力。这种能力并非模型规模简单线性…

OJ在线评测系统 后端 判题机模块预开发 架构分析 使用工厂模式搭建

判题机模块预开发(架构师)(工厂模式) 判题机模块 是为了把代码交个代码沙箱去处理 得到结果返回 代码沙箱 梳理判题模块和代码沙箱的关系 判题模块:调用代码沙箱 把代码和输入交给代码沙箱去执行 代码沙箱:只负责接受代码和输入 返回编译的结果 不负…

mat (Eclipse Memory Analyzer Tool)使用以及详解

前言 在Java开发中,内存问题往往不易被发现,但它们可能导致应用性能下降甚至崩溃。Eclipse Memory Analyzer Tool(MAT)是一个强大的开源工具,专门用于分析Java堆转储(heap dumps)文件&#xff…

【含文档】基于Springboot+Vue的高校竞赛管理系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 系统定义了三个…

2024四川省赛 The 2024 Sichuan Provincial Collegiate Programming Contest补题记录

B - Link Summon(补) 题意 每一组样例给定五个数字,分别对应1 2 3 4 5的数量,问能凑出多少个6(每个数字都可以当对应数字或者1使用) 思路 由于数字的数量固定,所以为了尽可能凑出多个6,贪心优先选择数量最少的数字配对方式 首…

【移植】标准系统方案之瑞芯微RK3568移植案例(二)

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 持续更新中…… Camera 基本概念 OpenHarmony 相机驱动框架模型对上实现相机 HDI …

Windows安装Vim,并在PowerShell中直接使用vim

大家好啊,我是豆小匠。 这期介绍下怎么在windows的PowerShell上使用vim,方便在命令行里修改配置文件等。 先上效果图: 1、下载Vim GitHub传送门:https://github.com/vim/vim-win32-installer/releases 选择win-64的版本下载即可&…

【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器

文章目录 C list 容器详解:从入门到精通前言第一章:C list 容器简介1.1 C STL 容器概述1.2 list 的特点 第二章:list 的构造方法2.1 常见构造函数2.1.1 示例:不同构造方法2.1.2 相关文档 第三章:list 迭代器的使用3.1 …

[大语言模型] 情感认知在大型语言模型中的近期进展-2024-09-26

[大语言模型] 情感认知在大型语言模型中的近期进展-2024-09-26 论文信息 Title: Recent Advancement of Emotion Cognition in Large Language Models Authors: Yuyan Chen, Yanghua Xiao https://arxiv.org/abs/2409.13354 情感认知在大型语言模型中的近期进展 《Recent A…

ElasticSearch安装分词器与整合SpringBoot

ElasticSearch安装分词器与整合SpringBoot 如果还没安装的点击安装ElasticSearch查看怎么安装 分词器 1.分词器 在Elasticsearch中,分词器(Tokenizer)是分析器(Analyzer)的一部分,它的主要职责是将文本输入…

MySql简介及发展

MySql简介及发展 1、MySql起源和分支 MySQL 是最流行的关系型数据库软件之一,由于其体积小、速度快、开源免费、简单易用、维护成本 低等,在集群架构中易于扩展、高可用,因此深受开发者和企业的欢迎。 Oracle和MySQL是世界市场占比最高的两…

C#图像处理学习笔记(屏幕截取,打开保存图像、旋转图像、黑白、马赛克、降低亮度、浮雕)

1、创建Form窗体应用程序 打开VS,创建新项目-语言选择C#-Window窗体应用(.NET Framework) 如果找不到,检查一下有没有安装.NET 桌面开发模块,如果没有,需要下载,记得勾选相关开发工具 接上一步,…

【ARM 嵌入式 编译系列 10.4 -- GNU Binary Utilies】

文章目录 GNU Binary Utilities 详细介绍常用工具介绍1. arm-none-eabi-objcopy2. arm-none-eabi-readelf3. arm-none-eabi-size4. arm-none-eabi-objdump5. arm-none-eabi-nm6. arm-none-eabi-strip7. arm-none-eabi-ld8. arm-none-eabi-as9. arm-none-eabi-addr2line10. arm-…

linux内核双向链表使用list klist

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、list和klist是什么?二、代码示例1.list2.klist 总结 前言 提示:这里可以添加本文要记录的大概内容: linux内核中大量使…

Spring Boot打造甘肃非遗文化传承网站

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本甘肃非物质文化网站就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信…

如何像专家一样修复任何 iPhone 上的“iPhone 已禁用”错误

“我忘记了密码,并且我的 iPhone 在多次输入错误密码后就被禁用了,如何再次访问我的手机?” 作为最安全的数字设备之一,iPhone 必须使用正确的密码解锁。即使您可以使用 Face ID 或 Touch ID 访问您的设备,在充电或重…

交警车辆通入城行证管理建设方案和必要性-———未来之窗行业应用跨平台架构

一、系统目标 建立一个高效、便捷、规范的车辆入城通行证管理系统,提高交警部门的管理效率,优化城市交通流量,减少交通拥堵,保障城市交通安全。 二、系统功能模块 1. 通行证申请模块 - 提供在线申请入口,申请人填…