首頁 > 後端開發 > php教程 > linux伺服器自動切割並清理日誌 linux系統 linux怎麼讀 linux教學

linux伺服器自動切割並清理日誌 linux系統 linux怎麼讀 linux教學

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
發布: 2016-07-29 08:54:14
原創
1508 人瀏覽過

需求

由於nginx的日誌會不停地增大,所以需要我們自己去切割日誌,方便管理,需要達到以下的效果:

  1. 按日期自動切割日誌,最小單位是天。
  2. 當日誌總量超過一定量時,自動直接清理日誌,限定總量不能超過1000MB。
  3. 寫入crontab定時任務裡。

分析

  1. nginx日誌目錄下分別有access.log和error.log,按照日期自動切割日誌則需要將每天的日誌以”yyyymmdd_access/error.log”的格式保存下來,用mv重命名每一天的日誌檔即可。
  2. 清理日誌就簡單了,只需要判斷這個資料夾下的大小,然後將一定日期之前的日誌檔案清理掉就ok了。
  3. crontab任務也比較簡單,詳情可以看這裡。
  4. 問題的關鍵在於,用mv重命名完昨天的日誌檔案後,nginx還是會向這個重命名後的檔案(如access_20160409.log)寫入日誌,我們的目的是需要讓nginx重新產生一個新的日誌檔案(access.log)並寫入。
  5. As we all know,linux系統下一切都是文件,所以每一個進程都有其文件描述符,而nginx進程將其自己的文件描述符寫入了nginx.pid中,我們需要告訴nginx,讓其重新開啟一個新的日誌檔案(日誌檔案的設定詳情可看這裡,簡單說就是讓日誌記錄什麼內容。)於是我們需要這條指令:

    kill -USR1 `cat ${pid_path}`

    這條指令的意思是:首先cat到nginx的pid,是一個整數,然後將信號USR1發送給這個進程,nginx進程收到這個信號後,會根據配置重新打開一個新的日誌文件,並將日誌寫入。

實作

腳本cut_nginx_log.sh:

<code><span>#!/bin/bash</span>
log_path=/path/to/nginx/
pid_path=/path/to/nginx.pid

<span>#清理掉指定日期前的日志</span>
DAYS=<span>30</span><span>#生成昨天的日志文件</span>
mv <span>${log_path}</span>access.log <span>${log_path}</span>access_$(date <span>-d</span><span>"yesterday"</span> +<span>"%Y%m%d"</span>).log
mv <span>${log_path}</span>error.log <span>${log_path}</span>error_$(date <span>-d</span><span>"yesterday"</span> +<span>"%Y%m%d"</span>).log

kill -USR1 `cat <span>${pid_path}</span>`

<span>#文件夹大小</span>
size=du -m <span>-s</span><span>${log_path}</span><span>if</span> [size <span>-gt</span><span>1000</span>];<span>then</span>
    find <span>${logs_path}</span> -name <span>"access_*"</span> -type f -mtime +<span>$DAYS</span> -exec rm {} \;
    find <span>${logs_path}</span> -name <span>"error_*"</span> -type f -mtime +<span>$DAYS</span> -exec rm {} \;
<span>fi</span></code>
登入後複製

新增至crontab:
(每天零點自動執行)

<code>crontab -e
<span>0</span><span>0</span> * * * /path/<span>to</span>/<span>script</span></code>
登入後複製

至此就解決了自動切割並清理日誌的功能,有問題的歡迎提出。

')​​.addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介紹了linux伺服器自動切割並清理日誌,包括了Linux方面的內容,希望對PHP教程有興趣的朋友有所幫助。

相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
centos7 - git的linux版本沒有centos的?
來自於 1970-01-01 08:00:00
0
0
0
學習Linux的先行知識
來自於 1970-01-01 08:00:00
0
0
0
Linux下連接資料庫
來自於 1970-01-01 08:00:00
0
0
0
Linux 批次修改檔名
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板