详解nginx日志定时备份和删除

  

这里给您详细讲解关于“详解nginx日志定时备份和删除”的完整攻略,过程中包含两条示例说明。

1. nginx日志定时备份

1.1. 日志文件配置

首先,在nginx的配置文件中,需要配置出日志文件的路径、文件名、日志格式等信息,例如:

http {
  log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

  access_log  /var/log/nginx/access.log  main;
}

这里定义了日志的格式为main,将日志文件保存在/var/log/nginx/access.log路径下。

1.2. 日志备份脚本

在Linux系统中,可以使用crontab定时备份日志。具体的备份脚本可以参考下面的示例。该示例会把每天的日志备份到以年月日形式命名的文件中。

#!/bin/bash
# nginx access log backup script

logs_path="/var/log/nginx"
backup_path="/data/nginx_logs_backup"
date_format=$(date +"%Y%m%d")
backup_file="access.log.$date_format.tar.gz"

if [ ! -d $backup_path ]; then
        mkdir -p $backup_path
fi

tar -zcf $backup_path/$backup_file $logs_path/access.log.*
find $backup_path/ -name "*.tar.gz" -mtime +7 -delete

1.3. 备份脚本说明

该备份脚本将日志文件路径/logs_path下的access.log.*的文件备份到$backup_path目录下,并将备份文件命名为access.log.年月日.tar.gz。

同时,该备份脚本会判断$backup_path目录是否存在,如果不存在就新建一个。

最后还需要添加一个定时任务,每天凌晨执行备份脚本:

# crontab -e
0 0 * * * /bin/bash /path/to/backup_script.sh

2. nginx日志定时删除

2.1. 删除脚本

日志备份是为了方便查看历史记录,但是过多的备份将会占用磁盘空间。因此,定期删除一些过期的备份是必要的。下面给出一个删除脚本示例。该脚本会删除过期的备份文件(7天以上)。

#!/bin/bash
# nginx access log clean script

logs_path="/var/log/nginx"
backup_path="/data/nginx_logs_backup"

find $backup_path/ -name "*.tar.gz" -mtime +7 -delete
find $logs_path/ -name "access.log.*" -mtime +7 -delete

2.2. 删除脚本说明

该删除脚本会删除备份目录$backup_path中7天以上的备份文件和日志文件路径$logs_path下的access.log.*中7天以上的文件。

同样,需要添加一个定时任务,每天凌晨执行删除脚本:

# crontab -e
0 0 * * * /bin/bash /path/to/clean_script.sh

这样,我们就成功地实现了nginx日志定时备份和删除。

相关文章