关于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,如需转载请自行联系原作者