龙空技术网

详解linux下nohup日志输出过大问题解决方案--分批切割

波波说运维 1992

前言:

现时各位老铁们对“linux 剪切文件少了”大致比较关怀,朋友们都需要学习一些“linux 剪切文件少了”的相关资讯。那么小编也在网络上网罗了一些对于“linux 剪切文件少了””的相关文章,希望大家能喜欢,兄弟们快快来学习一下吧!

概述

有的时候我们为了让某个程序在后台跑,一般都会用nohup ./xxx & 执行让程序后台运行,假设过了一段时间日志就上G了,如果有问题想要查看日志,显然打开文件是一件很麻烦的事,有什么办法可以减小文件大小呢?

nohup命令解释:

语法:

nohup [command] [args] [&]

说明:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部,如果不指定重定向,则日志默认输出到当前目录下nohup.out文件中,

重定向: nohup ./execute.sh > /home/xxx/log.log 2>&1 & :这样日志会重定向到指定目录下。

nohup和&的区别

& : 指在后台运行

nohup : 不挂断的运行,注意并没有后台运行的功能,,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行

切分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

cat /dev/null > nohup.out

(该命令会瞬间清空nohup.out文件,后续会继续写该文件),将日志定向到/dev/null中

使用重定向输出一样可以这样,只不过换成重定向的文件名即可

将这些命令定义在一个shell文件每天定时运行即可,这样每天日志会被分成若干份,排查也方便,而且如果日志积压过大的话。可以定时删除历史的日志,保留近几天即可。

最终脚本如下:

#!/bin/bashpath=$(cd `dirname $0`;pwd) cd $pathecho $pathcurrent_date=`date -d "-1 day" "+%Y%m%d"`echo $current_datesplit -b 65535000 -d -a 4 /home/nohup.out /home/log/log_${current_date}_cat /dev/null > nohup.out

觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

标签: #linux 剪切文件少了