天天看點

關于Linux中nohup.out日志過大問題

關于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 ] &amp;&amp; </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>&gt; </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 &amp;&gt;/dev/null</code>

2,添加定時任務

 crontab -e

<code> </code><code>0 1 * * *</code><code>/1</code> <code>/server/scripts/clearNohup</code><code>.sh &amp;&gt;</code><code>/dev/null</code>    <code>#添加定時任務:每周第一天的1點執行一次</code>

注:

 1、nohup指令解釋:

  a、文法:nohup [command] [args] [&amp;]

  b、說明:nohup 指令運作由 Command 參數和任何相關的 Arg 參數指定的指令,忽略所有挂斷信号。在登出後使用 nohup 指令運作背景中的程式。要運作背景中的 nohup 指令,添加&amp;(表示“and”的符号)到指令的尾部,如果不指定重定向,則日志預設輸出到目前目錄下nohup.out檔案中,一般送出如 :nohup ./execute.sh &amp;  這樣日志或輸出目前運作目下.nohup.out中重定向: nohup ./execute.sh &gt;  /home/xxx/log.log 2&gt;&amp;1 &amp; :這樣日志會重定向到指定目錄下 

 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,如需轉載請自行聯系原作者

繼續閱讀