Nginx按照日期自动切割日志
按照日期来切割站点访问日志,可以方便运维人员管理,便于查找记录。可以使用shell脚本加入计划任务来实现。
以下脚本实现了按照站点名称创建目录,并可以自动清理N天之前的日志文件。可以根据脚本注释来进行脚本中的变量配置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#!/bin/bash #Program: # Auto cut nginx log files #set the path to nginx log files log_files_path="/data0/logs/" #set nginx log files you want to cut,but not include '.log' log_files_name=(test. xxxxxx.com www.xxxxxx.com) #Set how long you want to save save_days=30 log_files_num=${#log_files_name[@]} #cut nginx log files for((i=0;i<$log_files_num;i++));do log_files_dir=${log_files_path}${log_files_name[i]} mkdir -p $log_files_dir mv ${log_files_path}${log_files_name[i]}.log ${log_files_dir}/${log_files_name[i]}_$(date -d "yesterday" +"%Y%m%d").log #delete 30 days ago nginx log files find $log_files_dir -mtime +$save_days -exec rm -rf {} \; done #set the path to nginx. nginx_sbin="/usr/local/nginx/sbin/nginx" $nginx_sbin -s reload |
(2016年5月9日补充新的一个方法)
补充一个方法,可以不用设置名称,自动对日志目录下的所有日志文件进行按照日期切割。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#!/bin/bash #Program: #Auto cut nginx log files #set the path to nginx log files log_files_path="/data0/logs/" #set nginx log files must include '.log' #Set how long you want to save save_days=30 for logfile in $(ls ${log_files_path}) do if [ ${logfile:0-4} = ".log" ] then log_files_dir=${log_files_path}${logfile//".log"/} mkdir -p ${log_files_dir} mv ${log_files_path}${logfile} ${log_files_dir}/${logfile//".log"/}_$(date -d "yesterday" +"%Y%m%d").log; find $log_files_dir -mtime + $save_days -exec rm -rf {} \; fi; done #set the path to nginx. nginx_sbin="/usr/local/nginx/sbin/nginx" $nginx_sbin -s reload |
加入计划任务:
1 2 3 4 5 6 |
vi /etc/crontab #添加命令: 01 0 * * * root /data0/scripts/cut_nginx_logs.sh /sbin/service crond restart //重启服务 |
每天的0点0分执行。