Nginx日志切割


以下是nginx日志切割的腳本,按天切割
$(date +%d) 獲取當月第幾天,如5月18日,就會取出來是18
這樣,可以做到按月循環,只保留一個月的日志,而不用擔心去清理過期的日志了
腳本請在crontab中設置執行,如在每天23點59分是執行日志切割腳本
59 23 * * * /usr/local/nginx/nginxlog_happy.sh

以下紅色字是腳本內容:
savepath_log保存日志的路徑
nginxlogs當前nginx默認的日志,如果你是裝在/usr/local/nginx目錄,那日志就和腳本上一樣

vim /usr/local/nginx/nginxlog_happy.sh  (使用vim命令新建一個bash日志分割腳本nginxlog_happy.log用以定時分割日志使用)內容如下:

(注意,實際使用時請刪除粗體部分的中文注釋,下文注釋旨在便於您的閱讀)


#/bin/bash 

#Site:Happy

#Email:happy.yin@qq.com
yesterday=$(date +%Y-%m-%d)  #取得服務器當前時間

savepath_log='/usr/local/nginx/logs/happylogs'#分割后的日志文件保存目錄(注意結尾目錄斜杠去掉)

nglogs='/usr/local/nginx/logs'  #nginx日志文件目錄,具體根據實際地址替換(結尾目錄斜杠去掉 以免與下面路徑中的"/"重復)

 

#判斷分割日志保存目錄是否存在不存在則創建 

if [ ! -d ${savepath_log} ]   # 注意 語句之間 空格不可省略,這是bash腳本 不是php腳本那樣隨和 

then

mkdir -p ${savepath_log}

fi 

#通過mv命令將日志移動到分割后的日志目錄里,然后發送kill -USR1信號給Nginx的主進程號,讓Nginx重新生成一個新的日志文件。

mv ${nglogs}/access.log  ${savepath_log}/access_${yesterday}.log  #具體根據你的實際日志文件名路徑 進行修改access.log名字

mv ${nglogs}/error.log  ${savepath_log}/error_${yesterday}.log  #具體根據實際日志文件名地址 修改error.log名字

mv ${nglogs}/host.access.log  ${savepath_log}/host.access_${yesterday}.log 
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)  #通知nginx重新生成新的日志

 

下面進行最重要的一步:(建議采用第二種方式進行修改)

crontab -e 在里面輸入如下內容:(每晚23點59分執行日志分割,注意中間的空格,如果該命令找不到crontab文件選用下列方式修改即可)

59  23  * * * /usr/local/nginx/nginxlog_happy.sh

如果上面命令找不到文件地址可使用如下 命令查找crontab 文件進行修改:

vim /etc/crontab在最后一行添加

59  23  * * * /usr/local/nginx/nginxlog_happy.sh

重新啟動crond使設置生效

/etc/rc.d/init.d/crond restart   #yum install -y vixie-cron 安裝計划任務,某些系統上可能沒有預裝需要執行此操作進行安裝
chkconfig crond on #設為開機啟動
service crond start #啟動
如果直接復制的話,要注意字體編碼的問題,很多windows上的腳本上傳到linux就出錯,還是因為編碼問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM