linux伺服器自動切割並清理日誌

2021-08-03 15:38:13 字數 1639 閱讀 2238

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

1.按日期自動切割日誌,最小單位是天。

2.當日誌總量超過一定量時,自動直接清理日誌,限定總量不能超過1gb。

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 $`

這條指令的意思是:首先cat到nginx的pid,是乙個整數,然後將訊號usr1傳送給這個程序,nginx程序收到這個訊號後,會根據配置重新開啟乙個新的日誌檔案,並將日誌寫入。

實現

指令碼cut_nginx_log.sh:

#!/bin/bash

log_path=/var/log/nginx/

pid_path=/run/nginx.pid

#清理掉指定日期前的日誌

days=30

#生成昨天的日誌檔案

mv $access.log $access_$(date -d

"yesterday" +"%y%m%d").log

mv $error.log $error_$(date -d

"yesterday" +"%y%m%d").log

#重新開啟乙個新的日誌檔案(檢測是否擁有許可權)

kill -usr1 `cat $`

#資料夾大小

size=`du -b /var/log/nginx/ | awk ''`

if [$size

-gt1000];then

find $ -name "access_*" -type f -mtime +$days -exec rm {} \;

find $ -name "error_*" -type f -mtime +$days -exec rm {} \;

fi

新增至crontab:

(每天零點自動執行)

crontab -e

0 0 * * * /var/spool/cron/crontab/test

至此就解決了自動切割並清理日誌的功能。

linux伺服器日誌切割

現在網上比較成熟的有logrotate和cronolog兩種工具,也有很多實現,我們這裡不使用這兩種,所以不多贅述,只講講使用最基本的linux切割日誌的方法。因為每天產生的日誌都會輸出到catalina.out這個檔案中,我們可以在每天晚上凌晨的時候把catalina.out這個檔案複製乙份,檔名...

Linux伺服器nginx日誌切割

由於nginx的日誌本身只是支援按照server name或者大小進行劃分,對於習慣了apache的按照乙個 每天乙個日誌的我來說是不可以接受的,所以就實現了按天切割的功能,這篇文章主要介紹了關於nginx日誌按日期切割的相關資料,需要的朋友可以參考下。本文實現的功能是在嗎每天凌晨00 00把前一天...

伺服器 Tomcat 清理快取(Linux)

1.進入tomcat bin目錄下,執行sh shutdown.sh命令關閉tomcat。2.然後執行命令 ps aux grep tomcat 命令 檢視tomcat命令是否真的關閉 3.如果沒有關閉執行 kill 9 pid 來徹底關閉tomcat pid是tomcat的程序id root 17...