关于Linux中nohup.out⽇志过⼤问题
背景,java项⽬,⼀般在运⾏JAVA程序时需要⽤到nohup命令来实现后台启动⽇志,默认保存在当前⽬露nohup.out⽂件。但是有些程序输出nohup⽂件会出现过⼤的情况。
在此解决如下:
1,在nohup.out 所在⽬录创建⼀个ClearNohup.sh 脚本,通过定时任务让其每周清理⼀次。防⽌nohup⽂件过⼤问题。
#!/bin/bash
# Author: Ljohn
# Last Update: 2018.02.24
# Description: nohup.out ⽇志分割
this_path=$(cd `dirname $0`;pwd)  #根据脚本所在路径
current_date=`date -d "-1 day" "+%Y%m%d"`  #列出时间
cd $this_path
echo $this_path
echo $current_date
do_split () {
[ ! -d logs ] && mkdir -p logs
split -b 10m -d -a 4 ./nohup.out  ./logs/nohup-${current_date}  #切分10兆每块⾄logs⽂件中,格式为:nohup-xxxxxxxxxx
if [ $? -eq 0 ];then
echo "Split is finished!"
else
echo "Split is Failed!"
exit 1
fi
}
do_del_log() {
find ./logs -type f -ctime +7 | xargs rm -rf #清理7天前创建的⽇志
cat /dev/null > nohup.out #清空当前⽬录的nohup.out⽂件
}
if do_split ;then
do_del_log
echo "nohup is split Success"
else
echo "nohup is split Failure"
exit 2
fi
2,添加定时任务
crontab -e
0 1 * * */1 /server/scripts/clearNohup.sh &>/dev/null    #添加定时任务:每周第⼀天的1点执⾏⼀次
注:
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、split命令可以将⼀个⼤⽂件分割成很多个⼩⽂件,有时需要将⽂件分割成更⼩的⽚段,⽐如为提⾼可读性,⽣成⽇志等。
选项
-b:值为每⼀输出档案的⼤⼩,单位为 byte。
-C:每⼀输出档中,单⾏的最⼤ byte 数。
-d:使⽤数字作为后缀。同时也可以使⽤-a length来指定后缀的长度:
-l:值为每⼀输出档的列数⼤⼩。
例如:
⽣成⼀个100k的⽂件,然后⽤split切分(格式datafile201703230000)。
linux重定向# dd if=/dev/zero bs=100k count=1 of=date.file
# split -b 10k -d -a 4 ./date.file  ./logs/nohup$(date +\%Y\%m\%d)log # cd logs/ ;ls
nohup20170323log0002  nohup20170323log0006
nohup20170323log0003  nohup20170323log0007
nohup20170323log0000  nohup20170323log0004
nohup20170323log0001  nohup20170323log0005

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。