關于Linux中nohup.out日志過大問題
背景,java項目,一般在運作JAVA程式時需要用到nohup指令來實作背景啟動日志,預設儲存在目前目露nohup.out檔案。但是有些程式輸出nohup檔案會出現過大的情況。
在此解決如下:
1,在nohup.out 所在目錄建立一個ClearNohup.sh 腳本,通過定時任務讓其每周清理一次。防止nohup檔案過大問題。
<code>#!/bin/bash</code>
<code># Author: Ljohn</code>
<code># Last Update: 2018.02.24</code>
<code># Description: nohup.out 日志分割</code>
<code>this_path=$(</code><code>cd</code> <code>`</code><code>dirname</code> <code>$0`;</code><code>pwd</code><code>) </code><code>#根據腳本所在路徑</code>
<code>current_date=`</code><code>date</code> <code>-d </code><code>"-1 day"</code> <code>"+%Y%m%d"</code><code>` </code><code>#列出時間</code>
<code>cd</code> <code>$this_path</code>
<code>echo</code> <code>$this_path</code>
<code>echo</code> <code>$current_date </code>
<code>do_split () {</code>
<code> </code><code>[ ! -d logs ] && </code><code>mkdir</code> <code>-p logs</code>
<code> </code><code>split</code> <code>-b 10m -d -a 4 .</code><code>/nohup</code><code>.out .</code><code>/logs/nohup-</code><code>${current_date} </code><code>#切分10兆每塊至logs檔案中,格式為:nohup-xxxxxxxxxx</code>
<code> </code><code>if</code> <code>[ $? -</code><code>eq</code> <code>0 ];</code><code>then</code>
<code> </code><code>echo</code> <code>"Split is finished!"</code>
<code> </code><code>else</code>
<code> </code><code>echo</code> <code>"Split is Failed!"</code>
<code> </code><code>exit</code> <code>1</code>
<code> </code><code>fi</code>
<code>}</code>
<code>do_del_log() {</code>
<code> </code><code>find</code> <code>.</code><code>/logs</code> <code>-</code><code>type</code> <code>f -ctime +7 | </code><code>xargs</code> <code>rm</code> <code>-rf </code><code>#清理7天前建立的日志</code>
<code> </code><code>cat</code> <code>/dev/null</code> <code>> </code><code>nohup</code><code>.out </code><code>#清空目前目錄的nohup.out檔案</code>
<code>if</code> <code>do_split ;</code><code>then</code>
<code> </code><code>do_del_log</code>
<code> </code><code>echo</code> <code>"nohup is split Success"</code>
<code>else</code>
<code> </code><code>echo</code> <code>"nohup is split Failure"</code>
<code> </code><code>exit</code> <code>2</code>
<code>fi</code>
<code># crontab -e 添加定時任務:每周第一天的1點執行一次</code>
<code>#0 1 * * */1 /server/scripts/clearNohup.sh &>/dev/null</code>
2,添加定時任務
crontab -e
<code> </code><code>0 1 * * *</code><code>/1</code> <code>/server/scripts/clearNohup</code><code>.sh &></code><code>/dev/null</code> <code>#添加定時任務:每周第一天的1點執行一次</code>
注:
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)。
<code># dd if=/dev/zero bs=100k count=1 of=date.file</code>
<code># split -b 10k -d -a 4 ./date.file ./logs/nohup$(date +\%Y\%m\%d)log</code>
<code># cd logs/ ;ls</code>
<code>nohup20170323log0002 nohup20170323log0006 </code>
<code>nohup20170323log0003 nohup20170323log0007 </code>
<code>nohup20170323log0000 nohup20170323log0004 </code>
<code>nohup20170323log0001 nohup20170323log0005</code>
<code></code>
本文轉自 ljohnmail 51CTO部落格,原文連結:http://blog.51cto.com/ljohn/1909665,如需轉載請自行聯系原作者