如何解决nohup命令启动项目日志文件过大问题
问题描述:最近在项目中发现nohup.out的文件大小已经有5G左右了,因为当前项目会生成自己的日志文件所以其实nohup.out这个文件对于我来说其实实没有用的,所以我决定在启动项目的时候让它不生成这个nohup.out文件
解决方案如下:
1、切分nohup.out,不让它无限增长
思路:定时将nohup.out切分成,多个小文件,但同时又要使nohup.out不会无限增长下去(一般情况下是程序不能中断的)。
a、每天(根据需要设置时间),定时切分前一天的日志,(比如每天大概1g,那么可以每次切分100m左右),
b、切分完后将nohup.out文件情况,保证新的输出日志会不停的继续输出到nohup.out
以上在shell中
current_date=`date -d "-1 day" "+%Y%m%d"` split -b 65535000 -d -a 4 nohup.out ./log/log_${current_date}_
这里使用split命令,将nouhup文件按指定大小切分(65535000b 大概60多M吧,可以自定义大小 ),并分成指定格式(-d -a 4以4位数字形式为后缀以从0000开始),最终输出格式为log_20190918_0001
-d 将字符后缀改为数字后缀,后面可加参数表示从哪个数字开始
-a 指定后缀的长度
-b<字节> : 指定每多少字节切成一个小文件
-C<字节> : 与参数"-b"相似,但是在切 割时将尽量维持每行的完整性
cat /dev/null > nohup.out
(该命令会瞬间清空nohup.out文件,后续会继续写该文件),将日志定向到/dev/null中
使用重定向输出一样可以这样,只不过换成重定向的文件名即可
将这些命令定义在一个shell文件每天定时运行即可,这样每天日志会被分成若干份,排查也方便,而且如果日志积压过大的话。可以定时删除历史的日志,保留近几天即可。
最终脚本如下:
#!/bin/bash path=$(cd `dirname $0`;pwd) cd $path echo $path current_date=`date -d "-1 day" "+%Y%m%d"` echo $current_date split -b 65535000 -d -a 4 /home/nohup.out /home/log/log_${current_date}_ cat /dev/null > nohup.out
2、手动输入命令,保留nohup.out文件多少行
例如保留10000行,可如下操作:
log=`tail -n 10000 nohup.out`; echo "$log" > nohup.out
4、转移nohup.out文件
通过定时任务脚本,执行任务,例如每隔1周,转移日志文件到指定目录。
5、cat /dev/null >nohup.out 该命令会清理掉日志内容,后续程序会继续写该文件
可以使用split定时分割日志,到其它目录下的文件,然后执行以上命令
6、只记录错误日志
nohup java -jar *.jar >/dev/null 2>error.log 2>&1 &
7、不记录任何日志
nohup java -jar *.jar >/dev/null 2>&1 &
linux重定向:
0:表示标准输出
1:标准输出,在一般时使用,默认时标准输出
2:表示错误信息输出
全部评论