今早,又發現幾例磁盤空間報警,佔用率都在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 |