springboot项目使用nohup将日志指定输出文件过大问题及解决办法

 更新时间:2024年10月12日 09:37:25   作者:z不像程序员的程序猿  
在Spring Boot项目中,使用nohup命令重定向日志输出到文件可能会使日志文件过大,文章介绍了两种解决方法:一是创建脚本直接清除日志文件,二是创建脚本保留部分日志内容,并将这些脚本加入定时任务中,这可以有效控制日志文件的大小,避免占用过多磁盘空间

springboot项目使用nohup将日志指定输出文件过大解决办法

假设目前有一个start.sh文件,内容为以下:

#!/bin/sh
jarname='app-gmt'
pid=`ps aux | grep $jarname | grep -v grep | grep java | awk '{print $2}'`
if [ "$pid" == "" ]
  then
        echo $jarname"进程不存在, 直接启动"$jarname"系统"
  else
        echo  "准备杀掉"$jarnamed"进程: "$pid
        kill -9 $pid
fi
nohup java -jar $jarname.jar --spring.profiles.active=online -server -Xms512m -Xmx1024m -Xss256k >> ./run.log 2>&1 &
echo "start success!!!"

注意看 nohup … >> ./run.log 2>&1 & 这一行,这里是将该进程的日志全部输出到指定的文件里,应该有不少人是这么做的。

那么这样做会出现一种情况,就是run.log会越来越大,直到爆炸。

该怎么解决呢?

一共分为两个步骤:

1.先创建一个清理日志文件的脚本
	1.直接清除方式
	2.保留部分方式
2.再创建一个定时任务(比如凌晨五点执行一次脚本)

下面对这两部进行细说:

第一点:这点其实是要看个人的具体需求的,比如清除的条件,可以是文件达到多大进行处理,处理时有的会保留一部分,有的会全清掉。

1.先说直接清除方式:

先创建一个脚本文件,内容如下:

#!/bin/bash
# 设置文件路径
FILE_PATH="/home/program/app/run.log"
# 设置文件大小阈值,单位为字节
THRESHOLD_SIZE=$((100 * 1024 * 1024))
# 获取文件大小
FILE_SIZE=$(du -b "$FILE_PATH" | cut -f1)
# 检查文件是否超过阈值
if [ $FILE_SIZE -gt $THRESHOLD_SIZE ]; then
    # 文件超过阈值,清空文件内容
    echo -n > "$FILE_PATH"
    echo "File has been cleaned up."
else
    echo "File size is within threshold."
fi

如果日志文件达到了100M,就清空文件内容。
记得把FILE_PATH改为你自己的日志文件路径

然后加入到定时任务:

crontab -e

内容如下:

0 5 * * * /data/log_clean/clean_app_log_file.sh

记得把路径替换成你自己的文件路径

2.保留部分方式

还是创建一个脚本文件:

log=`tail -n 10000 nohup.out`; 
echo "$log" > /home/program/app/run.log

记得把路径换成你自己的日志文件路径

然后创建定时任务,跟直接清除方式一样。

到此这篇关于springboot项目使用nohup将日志指定输出文件过大解决办法的文章就介绍到这了,更多相关springboot nohup文件过大内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java list与set中contains()方法效率案例详解

    Java list与set中contains()方法效率案例详解

    这篇文章主要介绍了Java list与set中contains()方法效率案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Java实现简易的洗牌和发牌功能

    Java实现简易的洗牌和发牌功能

    本文主要介绍了Java实现简易的洗牌和发牌功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 如何解决Project SDK is not defined问题

    如何解决Project SDK is not defined问题

    这篇文章主要介绍了如何解决Project SDK is not defined问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • springboot设置多环境配置文件

    springboot设置多环境配置文件

    本文介绍了在Spring Boot项目中配置多个环境(如dev、test、prod)的方法,可以通过创建多个`.yml`文件来实现,每个文件对应一个环境,并在`application.yml`中指定激活的配置文件,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • SpringBoot项目中使用OkHttp获取IP地址的示例代码

    SpringBoot项目中使用OkHttp获取IP地址的示例代码

    OkHttp 是一个由 Square 开发的高效、现代的 HTTP 客户端库,用于 Android 和 Java 应用程序,它支持 HTTP/2 和 SPDY 等现代网络协议,并提供了多种功能和优化,本文给大家介绍了SpringBoot项目中如何获取IP地址,需要的朋友可以参考下
    2024-08-08
  • Java超详细讲解接口的实现与用法

    Java超详细讲解接口的实现与用法

    Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为
    2022-04-04
  • 关于HashMap 并发时会引起死循环的问题解析

    关于HashMap 并发时会引起死循环的问题解析

    JDK1.8之前采用头插,即在链表结构上每次都把数据放在链表头部。JDK1.8采用尾插方法,很多朋友在学习Java并发容器和框架时,看到为什么要使用ConcurrentHashMap时不知道究其原因,今天小编通过本文给大家介绍下HashMap 并发死循环问题,一起看看吧
    2021-05-05
  • SpringBoot集成FastDFS依赖实现文件上传的示例

    SpringBoot集成FastDFS依赖实现文件上传的示例

    这篇文章主要介绍了SpringBoot集成FastDFS依赖实现文件上传,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Java中的缓冲区(Buffer)及其作用是什么详解

    Java中的缓冲区(Buffer)及其作用是什么详解

    缓冲区用于提升I/O效率,Java提供字符流、字节流及ByteBuffer类型,拥有capacity、position等属性,这篇文章主要介绍了Java中的缓冲区(Buffer)及其作用是什么的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-05-05
  • springboot实现配置多环境yml方式

    springboot实现配置多环境yml方式

    在SpringBoot项目中,通过创建不同的YAML配置文件来实现多环境配置是一种常见且有效的方法,这些配置文件包括application.yml、application-dev.yml、application-prod.yml等,分别对应不同的开发环境,如开发环境、生产环境
    2024-11-11

最新评论