關於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)。

# 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM