分享CentOS7按天分割Nginx日志并定期删除日志文件的方法
近日,对网站进行了功能优化,让服务器日志每天按日期自动分割,达到一定时间后自动删除,现将相关代码分享。首先,是分割脚本关键代码,代码如下:
#!/bin/bash
#设置log文件所在目录
log_files_path="/website/logs/nginx/"
log_files_dir=${log_files_path}
#设置log文件名,注意不需要写.log扩展名,要分割多个log的话,名字用空格隔开
log_files_name=(access error spider resource other)
#注意,上面的access error spider等5个都是log文件名,具体请按自己情况来
#设置nginx所程序在路径
nginx_sbin="/usr/sbin/nginx"
#设置你想让日志保留多少天
save_days=7
############################################
#程序功能实现代码 #
############################################
#mkdir -p $log_files_dir
log_files_num=${#log_files_name[@]}
#分割日志文件,即将现日志文件移动并重命名为带日期日志文件
for((i=0;i<$log_files_num;i++));do
mv ${log_files_path}${log_files_name}.log ${log_files_dir}${log_files_name}.log_$(date +%Y%m%d)
done
#删除超期日志文件
find $log_files_path -mtime +$save_days -exec rm -rf {} \;
#重新载入nginx配置,生成新log
$nginx_sbin -s reload
将上面文件保存为cut_nginx_log.sh,上传到服务器,然后运行测试:
#sh cut_nginx_log.sh 如果报错提示:未预期的符号 `$'{\r'' 附近有语法错误,是因为windows和linux编码不同造成的,可以使用notepad++打开文件,右击右下角,转为Unix编码方式。
如果不出意外,运行脚本成功后,会发现日志目录是下面这样:
然后,我们需要将脚本添加到系统计划任务中,让它每天定时运行。使用命令:crontab -e
#crontab -e 然后按字母I键,使其进入编辑模式,输入:0 0 * * * sh /website/logs/cut_nginx_log.sh
注意,后面脚本路径,请以自己的实际为准。
然后按ESC键,再输入 :wq (英文冒号)后按回车,即可添加计划任务。系统会提示:crontab: installing new crontab。
最后,可以输入命令:crontab -l (L的小写字母)查看当前计划任务。
这样,每天0时0分,系统就会自动执行日志分割,再也不担心大日志文件影响系统性能了。
页:
[1]