問題:nginx會按照nginx.conf的配置生成access.log和error.log,隨着訪問量的增加,日誌文件會愈來愈大,既會影響訪問的速度(寫入日誌時間延長),也會增長查找日誌的難度,nginx沒有這種按天或更細粒度生成日誌的機制。因此下面介紹兩種方法:1.寫腳本,經過定時任務按天重命名日誌、重啓nginx的方法實現(有重啓失敗的風險)2.經過工具cronolog實現。推薦方法二。nginx
例如存放路徑:/usr/local/nginx/sbin/cut_nginx_logs.sh,按天分割具體內容:bash
#!/bin/bash #function:cut nginx log files #set the path to nginx log files log_files_path="/data/nginxlog/" log_files_dir=${log_files_path} #set nginx log files you want to cut log_files_name=(access ) #set the path to nginx. nginx_sbin="/usr/local/nginx/sbin/nginx" #Set how long you want to save save_days=30 ############################################ #Please do not modify the following script # ############################################ #mkdir -p $log_files_dir log_files_num=${#log_files_name[@]} #cut nginx log files for((i=0;i<$log_files_num;i++));do mv ${log_files_path}${log_files_name[i]}.log ${log_files_dir}${log_files_name[i]}.log_$(date -d "yesterday" +"%Y-%m-%d") done #delete 30 days ago nginx log files find $log_files_path -mtime +$save_days -exec rm -rf {} \; #restart nginx $nginx_sbin -s reload
//打開定時任務 crontab -e //進入編輯模式 i //添加定時任務 00 00 * * * /bin/sh /usr/local/nginx/sbin/cut_nginx_logs.sh //保存退出 :wq! //重啓crontab服務 /etc/init.d/crond restart //查看定時任務,就會看到你添加的內容了 crontab -l
1.解壓縮 # tar zxvf cronolog-1.6.2.tar.gz 2.進入安裝文件所在目錄 # cd cronolog-1.6.2 3.運行安裝 # ./configure # make # make install 4.查看cronolog安裝後所在目錄(驗證安裝是否成功) # which cronolog 通常狀況下顯示爲:/usr/local/sbin/cronolog
mkfifo /usr/local/nginx/access_log_pipe
若是按小時使用access_%Y-%m-%d-%H.log;若是按分鐘使用access_%Y-%m-%d-%H-%M.logapp
... access_log /usr/local/nginx/access_log_pipe main; ...
nohup cat /usr/local/nginx/access_log_pipe | /usr/local/sbin/cronolog /usr/local/nginx/logs/access-%Y-%m-%d.log &
cd /usr/local/nginx/sbin ./nginx -s reload
[root@app2 /]# cd /usr/local/nginx/logs/ [root@app2 logs]# ll total 3544 -rw-r--r-- 1 root root 0 Oct 1 07:20 8099.access.log -rw-r--r-- 1 root root 3599534 Oct 1 07:58 access-2016-10-01.log -rw-r--r-- 1 root root 235 Oct 1 07:20 error.log -rw-r--r-- 1 root root 5 Oct 1 06:34 nginx.pid
[root@app2 sh]# pwd /usr/local/nginx/sh [root@app2 sh]# vi delete_nginx_logs.sh
添加內容工具
#set the path to nginx log files log_files_path="/usr/local/nginx/logs/" save_days=5 #delete ? days ago nginx log files find $log_files_path -mtime +$save_days -exec rm -rf {} \;
[root@localhost sh]# crontab -e 00 00 * * * /bin/sh /usr/local/nginx/sh/delete_nginx_logs.sh