Linux下用定时任务自动切割Nginx日志
下面是自动切割的脚本文件,将其复制保存为cut_nginx_logs.sh,然后上传到服务器的/root/目录下。
#!/bin/bash
#当前日志所在的位置
log_files_path="/data/logs/"
#分割后日志要存放位置
to_log_files_path="/data/logs/cutlog/"
#构造分割后存放位置的目录(年/月)
to_log_files_dir=${to_log_files_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")
#要切割的日志文件(不带后缀,多个日志用空格分开)
log_files_name=(access nginx_error logname1 logname2)
#nginx执行位置
nginx_sbin="/usr/local/nginx/sbin/nginx"
#日志要保存的天数
save_days=15
#创建分割后存放位置的目录
mkdir -p $to_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[i]}.log ${to_log_files_dir}/${log_files_name[i]}_$(date -d "yesterday" +"%Y%m%d").log
done
#删除设置天数外的日志
find $to_log_files_dir -mtime +$save_days -exec rm -rf {} \;
#重载nginx
$nginx_sbin -s reload
将上述内容复制保存为cut_nginx_logs.sh后,上传到/root/,再添加自动执行。
执行:
crontab -e
输入:
00 00 * * * /bin/bash /root/cut_nginx_logs.sh
这样每天0点整就开始自动切割脚本了。没有安装crontab的话,请参阅《Linux使用Crontab定时执行指定任务》一文。