[轉載·運維案例一]nginx日誌切割及7天前的歷史日誌刪除腳本

今早,又發現幾例磁盤空間報警,佔用率都在90%+,關鍵竟然是根分區!這要是日誌忽然暴漲,把根分區撐爆了,那就能夠體驗到「菊花一緊」的快感了吧?nginx

SecureCRT全局發送相同命令,快速抓取服務器信息的方法",利用CRT的全局命令把磁盤空間佔用率超過75%的服務器篩選出來,打算繼續進行清理磁盤空間這個枯燥的工做。bash

結果,發現好幾臺nginx方向代理服務器的日誌竟然還沒作分割處理,一個access.log竟然近200G大小!服務器

因而,就有了下面這個日誌切割腳本,按日期切割nginx日誌,並自動刪除7天前的日誌(日誌均已同步至專用日誌存儲服務器,可放心刪除歷史日誌。dom

#!/bin/bash
#初始化
LOGS_PATH=/data/nginx/logs/www.domain.com
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
#按天切割日誌
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
#向 Nginx 主進程發送 USR1 信號,從新打開日誌文件,不然會繼續往mv後的文件寫內容,致使切割失敗.
#kill usr1 意將服務中止接受新的鏈接,等待當前鏈接中止,從新載入配置文件,從新打開日誌文件,重啓服務器,從而實現相對平滑的不關機的更改。
kill -USR1 `ps axu | grep "nginx: master process" | grep -v grep | awk '{print $2}'`
#刪除7天前的日誌
cd ${LOGS_PATH}
find . -mtime +7 -name "*20[1-9][3-9]*" | xargs rm -f
exit 0

將這個腳本添加到計劃任務,天天執行一次便可:ide

1 0 * * * /usr/local/script/cut_del_logs.sh
相關文章
相關標籤/搜索