下面,我将为大家先容一个大略实用的Bash脚本,它能够帮助你轻松实现Nginx访问日志的按天切割和归档。
#!/bin/bash # 定义日志存放目录 LOG_DIR=/usr/local/nginx/logs # 获取昨天的日期 YESTERDAY_TIME=$(date -d "yesterday" +%F) # 定义按月归档的日志目录格式 LOG_MONTH_DIR=$LOG_DIR/$(date +"%Y-%m") # 定义须要切割的日志文件列表 LOG_FILE_LIST="default.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 /var/run/nginx.pid)
利用方法:将上述脚本保存为一个文件,例如log_rotate.sh。授予脚本实行权限:chmod +x log_rotate.sh。通过cron定时任务每天实行该脚本,例如:0 0 /path/to/log_rotate.sh(每天凌晨0点实行)。把稳事变:请确保脚本中的LOG_DIR和/var/run/nginx.pid路径与你的Nginx配置同等。如果你的Nginx配置中利用了多个access_log,请在LOG_FILE_LIST中添加相应的日志文件名,多个文件名之间用空格分隔。该脚本利用了date命令的-d选项来获取昨天的日期,这在某些操作系统上可能不可用。如果碰着问题,请根据你的操作系统调度日期获取办法。脚本实行完毕后,Nginx会自动重新打开新的日志文件进行写入,而旧的日志文件则被归档到指定目录。你可以根据须要调度归档目录的构造和命名规则。
