Nginx日志切割脚本
Nginx访问日志自动切割脚本:提升日志管理的效率与便捷性
在Web服务器的日常运维中,日志管理是一个至关重要的环节。Nginx作为当前流行的Web服务器软件,每天都会生成大量的访问日志。为了方便日志的查看、归档和分析,我们通常需要对这些日志文件进行切割,即按照一定的时间周期(如每天、每周或每月)创建新的日志文件。
一、脚本内容解析
以下是脚本的完整内容,并附有详细的注释和讲解:
#!/bin/bash
# 定义Nginx日志目录
LOG_DIR=/usr/local/nginx/logs
# 获取上一天的时间,格式为YYYY-MM-DD
YESTERDAY_TIME=$(date -d "yesterday" +%F)
# 归档日志的目录,按月创建,如2024-10
LOG_MONTH_DIR=$LOG_DIR/$(date +"%Y-%m")
# 定义需要切割的日志文件名称列表,这里以access.log为例
LOG_FILE_LIST="access.log"
# 循环处理日志文件
for LOG_FILE in $LOG_FILE_LIST; do
# 如果归档目录不存在,则创建该目录
[ ! -d $LOG_MONTH_DIR ] && mkdir -p $LOG_MONTH_DIR
# 将日志文件移动到归档目录,并在文件名后加上上一天的时间戳
mv $LOG_DIR/$LOG_FILE $LOG_MONTH_DIR/${LOG_FILE}_${YESTERDAY_TIME} done
# 发送USR1信号给Nginx进程,使其重新打开日志文件
kill -USR1 $(cat $LOG_DIR/nginx.pid)
二、脚本功能详解
- 定义日志目录和需要切割的日志文件:脚本首先定义了Nginx的日志目录
LOG_DIR
和需要切割的日志文件名称列表LOG_FILE_LIST
。在这个例子中,我们只处理了access.log
,但你可以根据需要添加更多的日志文件,如error.log
等。 - 获取上一天的时间:使用
date
命令获取上一天的时间,并格式化为YYYY-MM-DD
的形式,存储在变量YESTERDAY_TIME
中。 - 创建归档日志目录:按月创建归档日志的目录,目录名称为当前年月,如
2023-10
。如果该目录不存在,则使用mkdir -p
命令创建它。 - 切割并归档日志文件:通过循环处理日志文件列表中的每一个文件。对于每个文件,我们将其移动到归档目录,并在文件名后加上上一天的时间戳,以便于区分和管理。
- 重新打开日志文件:最后,我们通过发送
USR1
信号给Nginx进程来通知其重新打开日志文件。Nginx在接收到USR1
信号后,会关闭当前的日志文件并打开新的日志文件进行记录。这样,我们就可以实现日志文件的自动切割和归档了。
三、脚本的使用与定制
你可以将上述脚本保存为一个.sh
文件,比如cut_nginx_logs.sh
,并赋予其执行权限(chmod +x cut_nginx_logs.sh
)。然后,你可以通过cron定时任务来定期执行这个脚本,以实现日志的自动切割和归档。
此外,你还可以根据需要对脚本进行定制。例如,你可以修改LOG_DIR
和LOG_FILE_LIST
变量来适应你的实际环境。你也可以修改归档目录的命名规则和日志文件的命名规则,以满足你的特定需求。