以下是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就出錯,還是因為編碼問題