网站首页
Java
站长
开源
框架
理论
JS
Linux
DB
服务器
网络编程
生活
软件
PHP
其他
您的位置:首页 > 服务器 > CentOS7上保障Java程序运行,停止后自动启动
CentOS7上保障Java程序运行,停止后自动启动
2025-3-24    264    0

场景,服务器启动着一个Java程序ROBOTAPP.java,我们需要保证这个程序一直处于运行中,达到开机自启,停止后自动运行的效果。

实现方式为,编辑一个自定义启动脚本,脚本给该程序打一个标记,并验证该标记的程序是否在运行中,没有则执行启动命令。

然后把脚本注册到系统的Crontab定时运行任务中,同时为了防止日志无限制增大,使用logrotate切割定时运行的日志和程序控制台日志。

robotCheck.jpg


例如我们的程序robot.jar/www/wwwroot/robot目录下

在该目录下创建运行检查脚本:checkRun.sh,内容:

#!/bin/bash

# 定义标记和日志路径
APP_MARK="-DJpom.application=ROBOTAPP"
LOG_DIR="/www/wwwroot/robot"
LOG_FILE="$LOG_DIR/ROBOTAPP.log"

# 创建日志目录(如果不存在)
mkdir -p "$LOG_DIR"

# 启动命令
START_CMD="nohup java -Xmx4096M -Xms1024M -DJpom.application=ROBOTAPP 
-DJpom.basedir=/www/wwwroot/robot -jar /www/wwwroot/robot/robot.jar --server.port=8080 
>> $LOG_FILE 2>&1 &"

# 检查是否已经有该程序在运行
check_running() {
    # 使用 ps 命令查找包含标记的进程
    pgrep -f "$APP_MARK" > /dev/null
}

# 主逻辑
if check_running; then
    echo "$(date '+%Y-%m-%d %H:%M:%S') - Application with mark '$APP_MARK' 
    is running." >> "$LOG_FILE"
else
    echo "$(date '+%Y-%m-%d %H:%M:%S') - Application with mark '$APP_MARK' 
        is not running. Starting now..." >> "$LOG_FILE"
    eval "$START_CMD"
fi


关于Crontab参考:http://www.javacui.com/linux/459.html 

打开当前用户的 crontab 编辑器:

crontab -e

添加内容:

* * * * * /www/wwwroot/robot/checkRun.sh >> /www/wwwroot/robot/cron.log 2>&1

表示每分钟运行一次脚本,这样检查脚本会每分钟执行一次,并把执行日志输出到/www/wwwroot/robot/cron.log


配置日志切割

/etc/logrotate.d/ 目录下创建一个新的配置文件 robotCron

/www/wwwroot/robot/cron.log {
    daily
    rotate 7
    missingok
    notifempty
    compress
    delaycompress
    copytruncate
    dateext
    dateformat -%Y%m%d
}

创建一个新的配置文件 ROBOTAPP

/www/wwwroot/robot/ROBOTAPP.log {
    daily
    rotate 7
    missingok
    notifempty
    compress
    delaycompress
    copytruncate
    dateext
    dateformat -%Y%m%d
}


配置说明

daily:

表示每天滚动一次日志。

rotate 7:

表示保留最近 7 天的日志文件,超过 7 天的会被删除。

missingok:

如果日志文件不存在,logrotate 不会报错。

notifempty:

如果日志文件为空,则不进行滚动。

compress:

压缩旧的日志文件以节省磁盘空间。

delaycompress:

延迟压缩,即当天滚动后的日志不会立即压缩,而是在下一次滚动时压缩。这可以避免某些程序在写入日志时出现问题。

copytruncate:

先复制日志文件,然后截断原始日志文件。这对于持续写入日志的程序非常重要。

dateext 和 dateformat:

可选配置,用于为归档日志文件添加日期后缀,方便管理。


在修改完配置文件后,可以通过以下命令测试配置是否正确:

sudo logrotate -d /etc/logrotate.d/robotCron

-d 参数表示调试模式,它会显示 logrotate 的执行过程,但不会实际执行任何操作。

如果没有错误信息,说明配置文件是正确的。


手动运行 logrotate

如果你想手动运行一次 logrotate 来测试配置,可以使用以下命令:

sudo logrotate -f /etc/logrotate.d/robotCron

-f 参数表示强制运行,即使不符合条件(如未到滚动时间)也会执行。


自动运行 logrotate

logrotate 通常由系统的定时任务工具(如 cron)自动调用。大多数 Linux 发行版已经预配置了 logrotate 的每日任务,通常位于 /etc/cron.daily/logrotate。

你可以检查该文件是否存在:

ls /etc/cron.daily/logrotate

如果存在,则 logrotate 会每天自动运行一次。


上一篇: 利用JS绘制一个动态表格,高亮表格并连线
下一篇: 使用开源PaddleSpeech合成中文语音 2
发表评论:
您的网名:
个人主页:
编辑内容: