记录一些常用的函数和瞎折腾的过程……

Linux下用定时任务自动切割Nginx日志

提醒:本文最后更新于 1595 天前,文中所描述的信息可能已发生改变,请谨慎使用。

下面是自动切割的脚本文件,将其复制保存为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定时执行指定任务》一文。