linux中日誌的自動切割和刪除

來源:互聯網
上載者:User

例子一

/script/cut_log.phps會自動切割Nginx的Web訪問日誌。預設會儲存7天的日誌,根據硬碟空間情況調整,儘可能的儲存多一些的日誌。這個日誌很重要,比如網站運行異常,或者網站被黑,日誌都是很重要的檢測途徑。

/script/del_log.sh會每天自動刪除其他非重要日誌。

cron計劃任務規則在下面這個檔案中:
/etc/cron.d/yundaiwei

內容如下:

##### delete web logs
0 0 * * * root /script/cut_log.phps &>/dev/null

##### delete error logs
0 0 * * * root /script/del_log.sh &>/dev/null

例子二

昨天做了一個可以定期自動刪除的指令碼。

#!/bin/bash
find /usr/local/nginx/logs/ -mtime +15 -type f -name \*.log | xargs rm -f
上述指令碼是將nginxlogs下面的15天之前的記錄檔刪除,可以參考上面的指令碼刪除其他程式(如PHP、Tomcat)的記錄檔。不過使用指令碼的時候需要將Nginx的記錄檔進行自動分割,否則會刪除正在寫入的記錄檔了,Nginx日誌分割指令碼可以見 Linux下源碼方式安裝Nginx和PHP(FastCGI) 或者 CentOS系統初始安裝MySQL、PHP和Nginx的指令碼。

將指令碼儲存並使用chmod +x 命令指定可執行許可權,最好還需要加入工作清單中(每天淩晨一點執行):

[root@localhost ~]# crontab -e
00 01 * * * /bin/bash /root/shell/autodellogs.sh
[root@localhost ~]# service crond restart

例子三

上在介紹不夠詳細我人來看一篇詳細的


說明:

作業系統:CentOS

網站1:www.111cn.net

網站2:m.111cn.net

Nginx安裝路徑:/usr/local/nginx

Nginx設定檔路徑:/usr/local/nginx/conf/nginx.conf

網站1設定檔路徑:/usr/local/nginx/conf/vhost/bbs.osyunwei.com.conf

網站2設定檔路徑:/usr/local/nginx/conf/vhost/sns.osyunwei.com.conf

目的:

1、對網站1和網站2的nginx訪問日誌按天儲存,日誌路徑為:

網站1:/usr/local/nginx/logs/nginx_logs/bbs_logs

網站2:/usr/local/nginx/logs/nginx_logs/sns_logs

2、只保留30天以內的日誌記錄

具體操作:

1、建立日誌存放路徑

mkdir -p  /usr/local/nginx/logs/nginx_logs/bbs_logs

mkdir -p  /usr/local/nginx/logs/nginx_logs/sns_logs

2、設定Nginx日誌記錄格式

vi /usr/local/nginx/conf/nginx.conf  #編輯

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

取消日誌記錄格式前面的注釋,在最後添加一行,如下所示:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"'

'$http_host $upstream_status $upstream_addr $request_time $upstream_response_time';  #新添加的一行

:wq!  #儲存退出

3、設定虛擬機器主機設定檔

vi /usr/local/nginx/conf/vhost/bbs.osyunwei.com.conf  #編輯,在bbs.osyunwei.com;這一行下面添加

access_log  logs/bbs_access.log  main;  #注意這裡的main要和上一步中的main一致

:wq!  #儲存退出

vi /usr/local/nginx/conf/vhost/sns.osyunwei.com.conf  #編輯,在sns.osyunwei.com;這一行下面添加

access_log  logs/sns_access.log  main;  #注意這裡的main要和上一步中的main一致

:wq!  #儲存退出


service nginx reload  #重新載入nginx設定檔

4、建立Nginx日誌切割指令碼

vi /home/crontab/cut_nginx_log.sh  #編輯

#!/bin/sh

logs_path="/usr/local/nginx/logs/"

DAYS=30

mv ${logs_path}bbs_access.log  ${logs_path}nginx_logs/bbs_logs/bbs_access_$(date -d "yesterday" +"%Y%m%d").log

mv ${logs_path}sns_access.log  ${logs_path}nginx_logs/sns_logs/sns_access_$(date -d "yesterday" +"%Y%m%d").log

kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

find ${logs_path}nginx_logs/bbs_logs/  -name "bbs_access_*" -type f -mtime +$DAYS -exec rm {} \;

find ${logs_path}nginx_logs/sns_logs/  -name "sns_access_*" -type f -mtime +$DAYS -exec rm {} \;

:wq!  #儲存退出

chmod +x /home/crontab/cut_nginx_log.sh  #添加指令碼執行許可權

5、新增工作計劃,修改/etc/crontab

vi /etc/crontab   #在最後一行添加

0 0 * * * root /home/crontab/cut_nginx_log.sh  #表示每天淩晨執行

:wq!  #儲存退出

6、重新啟動crond使設定生效

/etc/rc.d/init.d/crond restart   #yum install -y vixie-cron安裝計劃任務,某些系統上可能沒有預裝

chkconfig crond on #設為開機啟動

service crond start #啟動

每天會在/usr/local/nginx/logs/nginx_logs/bbs_logs和/usr/local/nginx/logs/nginx_logs/sns_logs

目錄下產生類似bbs_access_20140126.log和bbs_access_20140126.log的記錄檔

並且只保留最近30天的日誌記錄

至此,Linux下定時切割Nginx訪問日誌並刪除指定天數前的日誌記錄完成。

備忘:如果指令碼在執行過程中出現下面錯誤

nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed

解決辦法:

/usr/local/nginx/sbin/nginx -c  /usr/local/nginx/conf/nginx.conf

#使用nginx -c的參數指定nginx.conf檔案的位置

擴充閱讀:

========================================================

Nginx訪問日誌參數說明

192.168.21.1 - - [27/Jan/2014:11:28:53 +0800] "GET /2.php HTTP/1.1" 200 133 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1707.0 Safari/537.36" "-"192.168.21.128 200 127.0.0.1:9000 0.119 0.119

$remote_addr:用戶端地址  192.168.21.1

$remote_user:用戶端使用者 -

$time_local:時間和時區   27/Jan/2014:11:28:53 +0800

$request:請求的URL路徑和HTTP協議   GET /2.php HTTP/1.1

$status: HTTP狀態  200

$body_bytes_sent:發送給用戶端頁面大小  133

$http_referer:頁面跳轉來源 -

$http_user_agent:使用者訪問終端  Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1707.0 Safari/537.36

$http_x_forwarded_for:HTTP 代理中,請求端真實IP -

$http_host:使用者在瀏覽器中輸入的URL(IP或著網域名稱)地址  192.168.21.128

$upstream_status: upstream狀態    200

$upstream_addr: 後端upstream地址及連接埠  127.0.0.1:9000

$request_time: 頁面訪問總時間  0.119

$upstream_response_time:頁面訪問中upstream回應時間   0.119

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.