iT邦幫忙

14

[好用的 Script] 以日期區分的 log rotate

在回應 哪裡還有這本書 "Shell Programming 333個應用範例技巧大全集?" 時,回去翻自己過去常用的一些資源,有些在裝系統的時候還會拿出來用一用,有些是好久沒有去造訪了;在此就把一些自己在系統管理上,或說在Command Line環境下,常會用的一些工具或資源,備忘出來,省得往舊機器裡面找資料。
newsyslog
這是我最常用也覺得最好用的shell script,是 Solaris 上都會有的一個 log rotate 的script,
通常在 Solaris 裡是在:/usr/lib/newsyslog ,基本上內容都是長這個樣子:http://web.mit.edu/shutkin/MacData\_1124b/afs/net/system/sun4c\_41/rsp.01/usr/lib/newsyslog
雖然有 logrotate, cronlog 等現成的工具,但自己希望做到每天一個檔,像 access.log.20090520 ,就比較不容易或麻煩,甚至要改 apache 上相關 log 的設定,而只要改寫 newsyslog 成為:

#!/bin/sh

LOGDIR=/where/nginx/logs
if test -d $LOGDIR
then
        cd $LOGDIR
        for LOG in access.log error.log
        do
        if test -s $LOG
        then
                test -f $LOG && mv $LOG  $LOG.`date +%Y%m%d`
                /bin/cp -f /dev/null $LOG
                chmod 644    $LOG
        fi
        done
chown nginx.nginx access.log error.log
#chmod 644 access.log error.log
fi
kill -HUP `cat /var/run/nginx.pid`

然後再用 crontab 中,每天晚上12點前來rotate,就可以每天一個檔了。

58 23 * * * /where/my/newsyslog 2>&1

所以不管在任何版本的 Linux, Unix, Solaris, BSD,此 script 都適用。

常指定在有查詢log需要,且每天的量也較大時,這樣的分檔就很方便。
當要查某字串,是否在哪些天裡有,透過 grep, fgrep, egrep 抓出來。
較常用在 mail log,procmail log, spam filter log, web log。

若有邦友對 logrotate, cronlog 或其他相關 log rotate 的程式,也可以容易地來做出以日期來區別的話,也請分享一下其作法。


0
灌籃高手
iT邦高手 1 級 ‧ 2009-05-21 15:06:26

cronolog也不錯用

從可看到的範例來看,好像都是與 apache 上的設定結合,
CustomLog "|/usr/sbin/cronolog /var/log/httpd/access_%Y%m%d.log" combined
看起來是其設定檔可以接受 | pipe line 的語法,才可以這樣設,
而 maillog 或其他 /var/log 下的檔案,好像看不出怎麼與 cronolog 結合使用…。
The cronolog program is normally invoked as a piped log filter program from Apache as specified in the configuration file.
所以看起來前提是該程式可以pipe log的設定。

0
蟹老闆
iT邦大師 1 級 ‧ 2009-05-21 15:21:22

感謝分享

0
kuochiahao
iT邦研究生 1 級 ‧ 2009-05-25 16:09:47

感謝分享

我要留言

立即登入留言