Shell 脚本实现自动启动程序、日志管理和定时任务监控

简介

本篇将通过Shell 脚本实现自动启动Java程序、日志管理和定时任务监控。脚本启动程序具灵活定制、可移植性和扩展性强的优点,可以根据需要添加额外的功能、配置选项和自定义行为,从而满足更具体的要求。

脚本编写

vim start_program.sh
#!/bin/bash
cd /path/to/youdir
# 设置Java程序的名称
JAVA_PROGRAM="java -jar test.jar"
# 设置日志输出路径
LOG_DIR="/path/to/log"
# 设置日志文件的前缀
LOG_PREFIX="program_log"
# 设置日志文件的最大大小(200M)
MAX_LOG_SIZE=200000000
# 设置最多保留的日志文件个数
MAX_LOG_FILES=7
# 设置定时任务检查的端口
CHECK_PORT=your_program_port

# 创建日志目录
mkdir -p "$LOG_DIR"
# 在日志轮转之前创建一个空白的日志文件
touch "$LOG_DIR/$LOG_PREFIX.log"

# 定义日志轮转函数
rotate_logs() {
    # 检查日志文件数量是否超过最大保留个数
    if [ $(ls -1 "$LOG_DIR/$LOG_PREFIX"* | wc -l) -gt $MAX_LOG_FILES ]; then
        # 删除最旧的日志文件
        rm -f "$(ls -1t "$LOG_DIR/$LOG_PREFIX"* | tail -n 1)"
    fi

    # 检查当前日志文件大小是否超过最大大小
    if [ $(wc -c <"$LOG_DIR/$LOG_PREFIX.log") -gt $MAX_LOG_SIZE ]; then
        # 轮转日志文件
        mv "$LOG_DIR/$LOG_PREFIX.log" "$LOG_DIR/$LOG_PREFIX-$(date +'%Y%m%d%H%M%S').log"
        touch "$LOG_DIR/$LOG_PREFIX.log"
    fi
}

# 定义检查程序运行状态函数
check_program_status() {
    # 检查程序是否在运行
    netstat -an | grep "$CHECK_PORT" > /dev/null
    if [ $? -ne 0 ]; then
        # 如果程序不在运行,则重新启动
        echo "程序未运行,重新启动中..."
        nohup $JAVA_PROGRAM >> "$LOG_DIR/$LOG_PREFIX.log" 2>&1 &
    else
        echo "程序正在运行..."
    fi
}

# 调用日志轮转函数
rotate_logs

# 调用检查程序运行状态函数
check_program_status

确保将脚本中的/path/to/log和your_program_port等替换为实际的日志路径和程序监听的端口。然后,赋予脚本执行权限:

chmod +x start_program.sh

最后,将脚本添加到定时任务中。您可以使用crontab -e命令编辑定时任务表,例如:

*/5 * * * * /path/to/start_program.sh

程序运行示例
在这里插入图片描述
Java程序最好是运行在一个低权限的用户中,以保证系统不会因为Java程序出错而受到影响。

脚本释义

Shebang 行:

#!/bin/bash

这一行指定了用于运行脚本的解释器,这里是 Bash。
Java 程序和日志设置:

JAVA_PROGRAM="java -jar test.jar"
LOG_DIR="/path/to/log"
LOG_PREFIX="program_log"
MAX_LOG_SIZE=200000000
MAX_LOG_FILES=7
CHECK_PORT=your_program_port

这些行定义了 Java 程序的命令、日志目录、日志文件前缀、最大日志大小、最大保留的日志文件数以及用于检查程序运行状态的端口。
创建日志目录:

mkdir -p "$LOG_DIR"

这一行创建日志目录,-p选项确保如果目录不存在,也会创建。
启动 Java 程序:

nohup $JAVA_PROGRAM >> "$LOG_DIR/$LOG_PREFIX.log" 2>&1 &

这一行使用 nohup 启动 Java 程序,并将输出追加到指定路径的日志文件中。2>&1将标准错误流(stderr)也重定向到标准输出流(stdout),&使得该命令在后台运行。
定义日志轮转函数:

rotate_logs() {
    # ...
}

这一部分定义了一个函数 rotate_logs,用于实现日志轮转的逻辑。
检查程序运行状态函数:

check_program_status() {
    # ...
}

这一部分定义了一个函数 check_program_status,用于检查程序运行状态的逻辑。
调用日志轮转函数:

rotate_logs

这一行调用了之前定义的 rotate_logs 函数,执行日志轮转逻辑。
调用检查程序运行状态函数:

调用检查程序运行状态函数:

这一行调用了之前定义的 check_program_status 函数,执行检查程序运行状态的逻辑。
最后,确保将脚本中的/path/to/log和your_program_port等替换为实际的日志路径和程序监听的端口。赋予脚本执行权限,并将脚本添加到定时任务中。
######################################################################################################################

今日推荐

小说:《仙狐》
推荐理由:创意A,开篇A,文笔也不错,太平天兵这个概念还是蛮不错的。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[202401C]巨人之力的题解

原题描述&#xff1a; 时间限制: 1000ms 空间限制: 262144kb 题目描述 两千多年以前&#xff0c;身为艾尔迪亚人的尤弥尔意外获得巨人之力&#xff0c;并且创造了九大巨人&#xff0c;其无以匹敌的力量使得整个世界都陷入了无尽的战乱纷争&#xff0c;艾尔迪亚之外的人类过…

第二百七十八回

文章目录 1. 概念介绍2. 使用方法2.1 DropdownMenu2.1 DropdownMenuEntry 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何禁止页面跟随手机自动旋转"相关的内容&#xff0c;本章回中将介绍DropdownMenu组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1.…

ClickHouse与Doris数据库比较

概述 都说“实践是检验真理的唯一标准”&#xff0c;光说不练假把式&#xff0c;那么本文就通过实际的测试来感受一下Doris和clickhouse在读写方面的性能差距&#xff0c;看看Doris盛名之下&#xff0c;是否真有屠龙之技&#xff1b;clickhouse长锋出鞘&#xff0c;是否敢缚苍…

Cortex-M3/M4内核NVIC及HAL库函数详解(4):使用HAL库配置外部中断

0 工具准备 Keil uVision5 Cortex M3权威指南&#xff08;中文&#xff09; Cortex M3与M4权威指南 stm32f407的HAL库工程 STM32F4xx中文参考手册 1 使用HAL库配置外部中断 前面我们已经熟悉了有关内核部分的寄存器配置&#xff0c;接下来我们结合stm32f407的GPIO外设&#xf…

UE 可靠UDP实现原理

发送 我们的消息发送都是通过 UChannel 来处理的&#xff0c;通过调用 UChannel::SendBunch 统一处理。 发送的 Bunch 是以 FOutBunch 的形式存在的。当 bReliable 为 True 的时候&#xff0c;表示 Bunch 是可靠的。 发送逻辑直接从UChannel::SendBunch处开始分析 1、大小限…

Docker(六)数据管理

作者主页&#xff1a; 正函数的个人主页 文章收录专栏&#xff1a; Docker 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01; Docker 数据管理 这一章介绍如何在 Docker 内部以及容器之间管理数据&#xff0c;在容器中管理数据主要有两种方式&#xff1a; 数据卷&…

postman使用-07变量

文章目录 一、变量参数化&#xff08;一&#xff09;、环境变量1、两种方式设置环境变量方法一方法二 2、引用3、选择需要的环境变量 &#xff08;二&#xff09;、参数变量1、全局变量设置全局变量引用查看引用的变量是否是自己设定的值 2、局部变量设置局部变量引用 二、文档…

Halcon基于描述符的模板匹配

Halcon基于描述符的模板匹配 与基于透视形变的模板匹配类似&#xff0c;基于描述符的模板匹配能够在物体处于透视形变的状态下进行匹配&#xff0c;并且已标定和未标定的相机图像都适用。与透视形变不同的是&#xff0c;它的模板不是根据边缘轮廊创建的&#xff0c;而是根据特…

Golang 中如何实现 Set

在Go编程中&#xff0c;数据结构的选择对解决问题至关重要。本文将探讨如何在 GO 中实现 set 和 bitset 两种数据结构&#xff0c;以及它们在Go中的应用场景。 Go 的数据结构 Go 内置的数据结构并不多。工作中&#xff0c;我们最常用的两种数据结构分别是 slice 和 map&#…

Rancher部署k8s集群测试安装nginx(节点重新初始化方法,亲测)

目录 一、安装前准备工作计算机升级linux内核时间同步Hostname设置hosts设置关闭防火墙&#xff0c;selinux关闭swap安装docker 二、安装rancher部署rancher 三、安装k8s安装k8s集群易错点&#xff0c;重新初始化 四、安装kutectl五、测试安装nginx工作负载 一、安装前准备工作…

【排序算法】六、快速排序(C/C++)

「前言」文章内容是排序算法之快速排序的讲解。&#xff08;所有文章已经分类好&#xff0c;放心食用&#xff09; 「归属专栏」排序算法 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 快速排序1.1 原理1.2 Hoare版本&#xff08;单趟&#xff09;1.3 快速排序完整代码&…

基于Elasticsearch+Logstash+Kibana+Filebeat的日志收集分析及可视化

sudo rm /var/lib/dpkg/lock* sudo dpkg --configure -a apt update tail -f /var/log/car.log 1.1、项目概述 海量的业务应用&#xff0c;也带来了海量的日志数据&#xff0c;给业务应用的运维带来了新的挑战。例如&#xff0c;我们常用的网约车应用&#xff0c;单个平台…

4496 蓝桥杯 求函数零点 简单

4496 蓝桥杯 求函数零点 简单 //C风格解法1&#xff0c;通过率100% #include <bits/stdc.h> // int a, b; 一定会自动初始化为 0int main(){int a 2, b 3; // 定义a&#xff0c;b&#xff0c;不会自动初始化&#xff0c;最好自己定义时初始化// windows环境下a值固定&…

在WIN从零开始在QMUE上添加一块自己的开发板(二)

文章目录 一、前言往期回顾 二、CPU虚拟化&#xff08;一&#xff09;相关源码&#xff08;二&#xff09;举个例子&#xff08;三&#xff09;测试 三、内存虚拟化&#xff08;一&#xff09;相关源码&#xff08;二&#xff09;举个例子测试 参考资料 一、前言 笔者这篇博客…

[MySQL]基础的增删改查

目录 1.前置介绍 2.数据库操作 2.1显示当前数据库 2.2创建数据库 2.3 使用数据库 2.4 删除数据库 3.常用数据类型 3.1整型和浮点型 3.2字符串类型 4.表的操作 4.1查看表结构 4.2创建表 4.3删除表 5.重点 5.1操作数据库 5.2常用数据类型 5.3操作表 1.前置介绍 …

IEEE-2024年第五届人工智能、机器人及控制国际会议(AIRC 2024)

IEEE--2024年第五届人工智能、机器人及控制国际会议(AIRC 2024) 会议时间: 2024年4月22-24日 会议地点: 埃及开罗 埃及英国大学 会议网址:AIRC 2024 | Artificial Intelligence, Robotics and Controlhttps://www.airc.org/ 埃及开罗 埃及英国大学 会议组织单位&#xff1a; 征…

【精选】中间件 tomcat漏洞复现

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

139基于matlab多旅行商MTSP问题

基于matlab多旅行商MTSP问题&#xff0c;利用遗传算法求解多旅行商问题的算法设计&#xff0c;输出MTSP路径。相互独立路径&#xff0c;同一起点路径。程序已调通&#xff0c;可直接运行。 139 matlab多旅行熵M-TSP (xiaohongshu.com)https://www.xiaohongshu.com/explore/65ab…

宝塔 ftp 服务器发回了不可路由的地址/读取目录列表失败

ftp连接不上&#xff1a; 1.注意内网IP和外网IP 2.检查ftp服务是否启动 &#xff08;面板首页即可看到&#xff09; 3.检查防火墙20端口 ftp 21端口及被动端口39000 - 40000是否放行 &#xff08;如是腾讯云/阿里云等还需检查安全组&#xff09; 4.是否主动/被动模式都不能连接…

2024 Windows10 | 搭建MySQL Cloudbeaver 可视化DBS | Docker Compose本地环境

2024 Windows10 | 搭建MySQL Cloudbeaver 可视化DBS | Docker Compose本地环境 前提条件docker-compose.yml总结 | 用Docker的原因&#xff1f; | 遇到的问题&#xff1f; 前提条件 Windows10 已安装 Docker Desktop提前准备映射用的4个文件夹&#xff08;3个用在 MySQL&#…