linux日誌分割
① Linux下使用cronolog切割伺服器日誌文件的方法
Linux下運行的Web伺服器Apache,默認日誌文件是不分割的,一個整文件既不易於管理,也不易於分析統計。安裝cronolog後,可以將日誌文件按時間分割,易於管理和分析。
cronolog安裝配置非常簡單,下載後只需要輸入幾個命令即可完成。
1、下載(最新版本)
# wget http://cronolog.org/download/cronolog-1.6.2.tar.gz
2、解壓縮
# tar zxvf cronolog-1.6.2.tar.gz
3、進入cronolog安裝文件所在目錄
# cd cronolog-1.6.2
4、運行安裝
# ./configure
# make
# make install
5、查看cronolog安裝後所在目錄(驗證安裝是否成功)
# which cronolog
一般情況下顯示為:/usr/local/sbin/cronolog
整個安裝過程結束,下面需要把日誌的格式配置一下:
1、虛擬主機配置文件 httpd-vhosts.conf
將Web日誌設置 CustomLog 修改為以下格式
CustomLog "|/usr/local/sbin/cronolog /www/logs/example_%Y%m%d.log" combined
當然,錯誤日誌設置 ErrorLog 也可以利用 cronolog 分割,設置為
ErrorLog "|/usr/local/sbin/cronolog /www/logs/error_%Y%m%d.log"
2、如果伺服器上只有一個站點(當然這種情況比較少),直接按上面所說格式修改 httpd.conf 文件日誌設置部分。
說明:
綠色部分 為 cronolog 安裝後所在位置,系統版本不同可能位置不完全一樣,以 which 命令查看到的位置為准;
藍色部分 為設置的日誌文件所在位置,根據需要修改;
紅色部分 為設置的日誌文件標識性字元,根據需要修改;
%Y%m%d 為日誌文件分割方式,例子中為「年月日」,也可以修改成自己需要的。
修改httpd.conf文件:
這個文件在我的電腦上是在 /etc/httpd/conf/httpd.conf 不同的伺服器 應該是不一樣的
在最後加上
# ServerAdmin [email protected]
# DocumentRoot /www/docs/mmy-host.example.com
# ServerName mmy-host.example.com
ErrorLog /data/logs/apache/webapps.wps.cn-error_log
CustomLog "|/usr/local/sbin/cronolog /data/logs/apache/%Y%m%d/access_log.%H" combined
#這個保證了每天一個文件夾 文件夾下 每個小時產生一個log
#CustomLog "|/usr/local/sbin/cronolog /data/logs/apache/%Y%m%%Hdaccess_log" combined
進入到 /etc/init.d/httpd configtest 這樣驗證你的配置文件是否正確
進入到 /etc/init.d/httpd restart 重啟apache 伺服器(不同的'系統應該是不一樣 要自己找到)
用於Tomcat
第一步
將
if [ -z "$CATALINA_OUT" ] ; then
CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
fi
修改為
if [ -z "$CATALINA_OUT" ] ; then
CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out.%Y-%m-%d
fi
第二步
將
touch "$CATALINA_OUT"
改為
#touch "$CATALINA_OUT"
第三步
將
org.apache.catalina.startup.Bootstrap "$@" start
>> "$CATALINA_OUT" 2>&1 &
修改為
org.apache.catalina.startup.Bootstrap "$@" start 2>&1
| /usr/local/sbin/cronolog "$CATALINA_OUT" >> /dev/null &
重新啟動 Tomcat
service tomcat restart
可以在 Tomcat 的 logs 目錄底下找到以系統日期為結尾的 catalina.out.yyyy-mm-dd 的檔案,這樣子就成功了。
後續就是持續觀察看看是不是每天都有產生一個新的 catalina.out.yyyy-mm-dd 檔案。然後再安排定期刪除這些較舊的 log 檔即可。
② Linux系統下nginx日誌每天定時切割的腳本寫法
下面是deepvps自己用的自動每天定時切割Nginx日誌的`腳本,很方便很好用,推薦給大家使用。本腳本也是參考了張宴老師的文章,再次感謝張宴老師。
1、創建腳本/usr/local/nginx/sbin/cut_nginx_log.sh
vi /usr/local/nginx/sbin/cut_nginx_log.sh
輸入以下內容:
#!/bin/bash
# This script run at 00:00
# The Nginx logs path
logs_path=」/home/www/logs/」
mkdir -p ${logs_path}$(date -d 「yesterday」 +」%Y」)/$(date -d 「yesterday」 +」%m」)/
mv ${logs_path}access.log ${logs_path}$(date -d 「yesterday」 +」%Y」)/$(date -d 「yesterday」 +」%m」)/access_$(date -d 「yesterday」 +」%Y%m%d」).log
kill -USR1 `cat /usr/local/nginx/nginx.pid`
2、設置crontab,每天凌晨00:00切割nginx訪問日誌
crontab -e
輸入以下內容:
00 00 * * * /bin/bash /usr/local/nginx/sbin/cut_nginx_log.sh