这两天要对nginx日志进行切割,在网上看到的都是在零点停止nginx,然后将access.log日志改名,再启动nginx,没有对历史日志进行分离,而且我对停止nginx服务再启动也不是很感冒,所以自己写了个按日期切割历史日志的脚本。
我的思路是:先将某天日志grep导出,再用sed -i删除这天的日志,对日志减肥……
但是碰到了个问题是,sed -i减肥后的access.log文件不再增大……
于是非常无奈的最后加了个重启nginx。
希望有朋友告诉我为什么日志文件不再增加,导致一定要重启nginx。
1>vi /usr/local/webserver/nginx/logs/cut_nginx_log.sh
#!/bin/bash #function:cut nginx log files for lnmp #author: http://lnmp.org #set the path to nginx log files log_files_path="/usr/local/webserver/nginx/logs/" log_files_dir="/usr/local/webserver/nginx/logs/old/" #set nginx log files you want to cut log_files_name="access.log" save_days=30 mkdir -p ${log_files_dir} ############################################ #Please do not modify the following script # ############################################ cp ${log_files_path}${log_files_name} ${log_files_path}${log_files_name}_bak #循环生成删除十月3号到12号的旧日志, #for((i=3;i<13;i++)); #do #if [ $i -lt '10' ];then #d=0$i #else #d=$i #fi #11/Oct/2015 #date_g=$(date -d last-day +"%d/%b/%Y") #date_g=$d/Oct/2015 #20151011 #date_l=$(date -d last-day +"%Y%m%d") #date_l=201510$d #11\/Oct\/2015 #date=$(date -d last-day +"%d\/%b\/%Y") #date="$d\/Oct\/2015" #cat ${log_files_path}${log_files_name} | grep ${date_g} >${log_files_dir}www_access_${date_l}.log #sed -i /${date}/d ${log_files_path}${log_files_name} #done #11/Oct/2015 昨天日期 date_g=$(date -d last-day +"%d/%b/%Y") #20151011 昨天日期 date_l=$(date -d last-day +"%Y%m%d") #11\/Oct\/2015 昨天日期 date=$(date -d last-day +"%d\/%b\/%Y") cat ${log_files_path}${log_files_name} | grep ${date_g} >${log_files_dir}www_access_${date_l}.log sed -i /${date}/d ${log_files_path}${log_files_name} #delete 30 days ago nginx log files find ${log_files_dir} -mtime +${save_days} -exec rm -rf {} \; #重启nginx服务,否则不知道为什么,日志不再增长 /usr/local/webserver/nginx/sbin/nginx -s reload
2>chmod 777 /usr/local/webserver/nginx/logs/cut_nginx_log.sh #运行的权限
3>crontab -e
尾部追加:
0 4 * * * /usr/local/webserver/nginx/logs/cut_nginx_log.sh
4>crontab -l #查看是否成功