需求
由於nginx的日誌會不停地增大,所以需要我們自己去切割日誌,方便管理,需要達到以下的效果:
分析
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教程有興趣的朋友有所幫助。