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

news2024/11/26 18:22:20

简介

本篇将通过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,文笔也不错,太平天兵这个概念还是蛮不错的。
在这里插入图片描述

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

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

相关文章

Lambda支持的方法引用

目录 引用类中的静态方法替换lambda引用对象实例化方法替换lambda引用类中的实例方法替换lambda引用构造器替换lambda 引用类中的静态方法替换lambda 引用类方法&#xff1a;引用类的静态方法&#xff1b;类名::静态方法名 demo: 将String类型数据转换成为Integer类型 创建一个…

MySQL 8.3 发布, 它带来哪些新变化?

1月16号 MySQL 官方发布 8.3 创新版 和 8.0.36 长期支持版本 (该版本 没有新增功能&#xff0c;更多是修复bug )&#xff0c;本文基于 官方文档 说一下 8.3 版本带来的变化。 一 增加的特性 1.1 GTID_NEXT 支持增加 TAG 选项。 之前的版本中 GTID_NEXTUUID:number &#xff…

Ant下载及安装

文章目录 前言一、Ant下载二、Ant安装三、Ant配置环境变量 前言 Ant是一个帮助构建软件的Java库和命令行工具。Ant是一个Java库和命令行工具&#xff0c;其任务是将构建文件中描述的过程驱动为相互依赖的目标和扩展点。Ant的主要已知用途是构建Java应用程序。Ant提供了许多内置…

DolphinScheduler-3.2.0集群部署教程

本文目录 1.集群部署方案(2 Master 3 Worker)2.前置准备工作3.端口说明4.DS集群部署1.时间同步2.配置用户、权限3.配置集群免密登陆4.ZK集群启动5.初始化数据库1.创建数据库、用户、授权2.解压缩安装包3.添加MySQL驱动至libs目录 6.配置文件修改1.dolphinscheduler_env.sh 配置…

为vs code配置unity开发环境

1.安装.NET.Core SDK 我们可以访问官网下载安装SDK及tool&#xff08;https://www.microsoft.com/net/download/core&#xff09;下载。有的系统只提供了执行文件&#xff0c;没有提供安装包&#xff0c;需要自己做一些配置。 下载好对应的版本就可以安装了&#xff0c;安装好以…

linux 使用笔记

1.查看运行内存 a.Free 快速查看内存的方法&#xff0c;也是经常使用的命令&#xff0c; -h 更人性化的显示内存的单元 -m 以M的形式显示 b.Top Top命令提供了实时性的运行中的程序的资源使用统计。可以根据内存的使用和大小来进行排序。 如上所示&#xff0c;top命令可以看…

实现SERVLET应用程序

实现SERVLET应用程序 Smart Software 的开发人员希望开发一个Web应用程序,使用servlet显示保存在表中的雇员信息。该应用程序需要有用户界面,用户可在该用户界面中指定要查看雇员数据的雇员ID。该界面还应显示网站被访问的次数。 解决方案 要解决上述问题,需要执行以下任务…

cs231n assignment1——SVM

整体思路 加载CIFAR-10数据集并展示部分数据数据图像归一化&#xff0c;减去均值&#xff08;也可以再除以方差&#xff09;svm_loss_naive和svm_loss_vectorized计算hinge损失&#xff0c;用拉格朗日法列hinge损失函数利用随机梯度下降法优化SVM在训练集和验证集计算准确率&a…

gin渲染篇

1. 各种数据格式的响应 json、结构体、XML、YAML类似于java的properties、ProtoBuf package mainimport ("github.com/gin-gonic/gin""github.com/gin-gonic/gin/testdata/protoexample" )// 多种响应方式 func main() {// 1.创建路由// 默认使用了2个中…

(3)【Python数据分析进阶】Machine-Learning模型与算法应用-线性回归与逻辑回归

目录 一、Linear Regression线性回归应用 应用案例&#xff08;一&#xff09;——自定义数据&#xff08;Custom data&#xff09; 1、下载安装sklearn库 2、导入库函数 3、加载数据集 4、创建线性回归对象 5、模型训练 6、预测结果 7、绘制模型图像 8、应用模型进行…

014-信息打点-JS架构框架识别泄漏提取API接口枚举FUZZ爬虫插件项目

014-信息打点-JS架构&框架识别&泄漏提取&API接口枚举&FUZZ爬虫&插件项目 #知识点&#xff1a; 1、JS前端架构-识别&分析 2、JS前端架构-开发框架分析 3、JS前端架构-打包器分析 4、JS前端架构-提取&FUZZ 解决&#xff1a; 1、如何从表现中的JS提取…

SpringBoot:详解Bean生命周期和作用域

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java项目分享》 《RabbitMQ》《Spring》《SpringMVC》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、生命周期二…

禅道的安装及使用流程

目录 一.安装 1.下载禅道安装包​http://www.zentao.net/ 2.选择禅道开源版 3.选择需要下载的安装包&#xff08;注意&#xff1a;下载的安装包必须放在根目录&#xff0c;不能移动&#xff09; 4.将下载的安装包双击进行解压&#xff1b;解压后的文件为d:\xampp&#xff1b…

AI绘画Stable Diffusion进阶使用

本文讲解&#xff0c;模型底模&#xff0c;VAE美化模型&#xff0c;Lora模型&#xff0c;hypernetwork。 文本Stable Diffusion 简称sd 欢迎关注 使用模型 C站&#xff1a;https://civitai.com/ huggingface&#xff1a;https://huggingface.co/models?pipeline_tagtext-to-…

解锁黑匣子:Chain-of-Note如何为(RAG)带来透明度

英文原文地址&#xff1a;https://ai.plainenglish.io/unlocking-the-black-box-how-chain-of-note-brings-transparency-to-retrieval-augmented-models-rag-ae1ebb007876 论文地址&#xff1a;https://arxiv.org/pdf/2311.09210.pdf 2023 年 11 月 16 日 介绍 检索增强语…

AWS 专题学习 P8 (ECS、EKS、Lambda、CloudFront、DynamoDB)

文章目录 什么是 Docker&#xff1f;操作系统上的 DockerDocker 镜像存储Docker vs. Virtual MachinesDocker 入门AWS 中的 Docker Containers Management Amazon ECSEC2 Launch TypeFargate Launch TypeECS 的 IAM RolesLoad Balancer IntegrationsData Volumes (EFS)ECS Serv…

代码随想录算法训练营第三天 | 链表理论基础 203.移除链表元素 707.设计链表 206.反转链表

链表理论基础 链表是一种通过指针串连在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据域&#xff0c;一个是指针域&#xff08;存放指向下一个节点的指针&#xff09;。最后一个节点的指针指向 null。链表的存储方式&#xff1a;数组在内存中是连续…

TypeScript教程(一)在vscode中的配置TypeScript环境

TypeScript教程&#xff08;一&#xff09;在vscode中的配置TypeScript环境 文章目录 TypeScript教程&#xff08;一&#xff09;在vscode中的配置TypeScript环境一、前言二、具体步骤1、Node.js安装2、TypeScript安装3、helloworld 一、前言 未来的开发者们请上座&#xff0c…

EasyRecovery2024电脑数据恢复工具好不好用?

Ontrack是我们综述中的第一个产品&#xff0c;由于该软件的功效和广度&#xff0c;我认为它完全基于业务。有一个具有基本功能的免费版本和一系列付费版本&#xff0c;不仅可以恢复文件&#xff08;免费版和家庭版&#xff09;&#xff0c;还可以创建磁盘映像/从 CD 和 DVD 恢复…

如何自学Python:一份详细的指南

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;有感而谈⛺️稳中求进&#xff0c;晒太阳 引言 Python是一种广泛使用的高级编程语言&#xff0c;以其简洁明了的语法和强大的功能而受到许多程序员的喜爱。无论是数据分析、网络开发&#…