详解linux下nohup⽇志输出过⼤问题解决⽅案
最近在⼀hadoop测试集运⾏⼀个spark streaming程序,然后使⽤nohup ./execute.sh & 执⾏让程序后台运⾏,才⼏天⽇志就上G了,如果有问题想要查看⽇志,显然打开⽂件是⼀件很⿇烦的事,于是我想办法通过减⼩⽂件⼤⼩:
1、nohup命令解释:
a、语法:nohup [command] [args] [&]
b、说明:nohup 命令运⾏由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断信号。在注销后使⽤ nohup 命令运⾏后台中的程序。要运⾏后台中的 nohup 命令,添加 & (表⽰“and”的符号)到命令的尾部,如果不指定重定向,则⽇志默认输出到当前⽬录下nohup.out⽂件中,
⼀般提交如:nohup ./execute.sh & 这样⽇志或输出当前运⾏⽬下.nohup.out中
重定向: nohup ./execute.sh > /home/xxx/log.log 2>&1 & :这样⽇志会重定向到指定⽬录下
2 、切分nohup.out,同时不让它⽆限增长
我这⾥⽤的⼀般提交命令:nohup ./execute.sh &,这样在当前⽬录就有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开始,具体可以百度split命令⽤法),最终输出格式为log_20160610_0001
cat /dev/null > nohup.out (该命令会瞬间清空nohup.out⽂件,后续会继续写该⽂件),将⽇志定向到/dev/null中
使⽤重定向输出⼀样可以这样,只不过换成重定向的⽂件名即可
将这些命令定义在⼀个shell⽂件每天定时运⾏即可,这样每天⽇志会被分成若⼲份,排查也⽅便,⽽且如果⽇志积压过⼤的话。可以定时删除历史的⽇志,保留近⼏天即可
整体代码如下:
this_path=$(cd `dirname $0`;pwd)linux重定向
cd $this_path
echo $this_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
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论