Nginx的日志文件是沒有切割(rotate)功能的,但是我們可以寫一個腳本來自動切割日志文件。
首先我們要注意兩點:
1.切割的日志文件是不重名的,所以需要我們自定義名稱,一般就是時間日期做文件名。
2.既然是自動切割日志文件,那當然需要定時任務來進行操作,但是這里還涉及一個問題,Nginx的日志是存儲在一個文件的,我們要切割就要保證日志數據的完整性,確保得到想要日期的日志信息,這里有一個方法:向Nginx主進程發送USR1信號 ,以重新開啟日志的方式記錄所需的日志信息。
接下來就是創建腳本:
在Nginx的安裝目錄下創建nginx_log.sh腳本
# /opt/nginx/ 這是我的nginx安裝目錄,大家替換成自己的目錄 vi /opt/nginx/nginx_log.sh
編寫腳本如下:
#!/bin/bash #設置切割的日志文件存放目錄 LOG_HOME="/opt/nginx/logs/" #設置切割的日志名稱(這里用日期時間的命名方式) LOG_PATH_BAK="$(date -d yesterday +%Y%m%d%H%M)".accesss.log #開始切割日志文件 mv ${LOG_HOME}/access.log ${LOG_HOME}/${LOG_PATH_BAK}.log #向nginx主進程發送信號 重新打開記錄日志 kill -USR1 `cat /opt/nginx/logs/nginx.pid`
腳本寫完了,開始創建定時任務,這里用Linux自帶的定時任務管理 crontab 命令
#創建系統定時任務
crontab -e
如下進行編輯:
#一分鍾執行一次 */1 * * * * sh /opt/nginx/nginx_log.sh
這里的Cron表達式設置的是一分鍾執行一次,可以根據需要更改。
重啟定時任務
service crond restart
接下來就可以等待一分鍾看看是否生成日志信息:
至此完成!