linux jar包启动后日志清空问题记录

  • Post author:
  • Post category:linux


1、启动命令—覆盖模式

nohup java -jar test.jar > test.txt 2>& 1 &

这种方式启动的 在shell里使用清空命令清空文件无效

cat /dev/null > test.txt #清空
echo -n "" > test.txt # 清空不生成空行
echo "" > test.txt #清空
cmd >> test.txt  2>&1 #清空

使用以上四种方式清空都可以清空文件,但是清空后看到文件为0kb,但是过后有新日志写入又会回到原来的大小,这是因为上面的启动方式 test.jar > test.txt 是覆盖文件,这种启动命令只有重新启动文件才会从零开始被覆盖,如果使用命令清空文件,但由于服务没有停止运行,文件写入的指针没有改变会继续从原来指针写入,前面没有的内容会变成空行–这就是文件空洞,下载下来都是空行,这种方式启动若要清空日志,只有重启服务改变写入指针才能清空日志,如果不想重启服务就只能改变日志写入方式为追加

2、启动命令—追加模式

nohup java -jar test.jar >> test.txt 2>& 1 &

这种启动方式是追加方式,就是在原文件的后面追加,如果日志清空后就会在零的位置开始追加,

但是启动的时候如果原文件已经有内容,甚至几百M或者几个G会接着写入的,除非手动清空文件后才会从零追加,但这是我需要的效果,在不停止服务的情况下清空日志,再配上crontab 实现定时清空日志就非常完美了

3、定时清空日志

首先新建sh脚本文件

#!/bin/sh
#清空日志文件
cat /dev/null > test.txt
#cat /dev/null > test1.txt
#cat /dev/null > test2.txt

赋予脚本执行权限

chmod +x clear.sh

4.定时备份

添加定时任务 编辑crontab

vim /etc/crontab

每天夜里3点执行清空任务

0 3 * * * root clear.sh

或者 每周日凌晨2点执行清空任务

0 2 * * sun root clear.sh



版权声明:本文为cscscssjsp原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。