nginx日志分割备份的方法

本文介绍如何通过shell脚本实现Nginx日志的自动切割与备份,包括创建备份目录、脚本编写、设置定时任务等步骤,确保日志管理的高效与有序。

创建存放备份文件目录

mkdir /usr/local/nginx/back_up_logs 

创建脚本 log. sh

vim /usr/local/nginx/sbin/log.sh 

log.sh文件的内容:

#!/bin/sh
#设置基路径
BASE_DIR=/usr/local/nginx
#要切割备份的日志文件名
BASE_FILE_NAME=access.log
#日志路径
LOG_PATH=$BASE_DIR/logs
#日志切割后备份路径
BAK_PATH=$BASE_DIR/back_up_logs
#切割日志文件
LOG_FILE=$LOG_PATH/$BASE_FILE_NAME
#获取时间
BAK_TIME=`/bin/date -d yesterday +%Y%m%d%H%M`  //以分钟为单位
#备份文件
BAK_FILE=$BAK_PATH/$BAK_TIME-$BASE_FILE_NAME
echo $BAK_FILE
#关闭nginx
$BASE_DIR/sbin/nginx -s stop
#移动切割文件
mv $LOG_FILE $BAK_FILE
#启动nginx
$BASE_DIR/sbin/nginx

设置脚本授权

chmod 755 log.sh

执行该命令设置定时任务

crontab -e 

每分钟执行一次,保存退出即可自动开始执行

*/1 * * * * sh /usr/local/nginx/sbin/log.sh 

定时任务

crontab -l //查看所有定时任务
crontab -r //删除所有定时任务
在容器环境下对Nginx日志进行分割,有以下两种常见方法: #### 利用脚本日志切割 可以编写脚本按天进行日志切割,以下是两种示例脚本: - **脚本一**: ```bash #!/bin/bash year=`date +%Y` month=`date +%m` day=`date +%d` logs_backup_path="/usr/local/nginx/logs_backup/$year$month" logs_path="/usr/local/nginx/logs/" logs_access="access" logs_error="error" pid_path="/usr/local/nginx/logs/nginx.pid" [ -d $logs_backup_path ]||mkdir -p $logs_backup_path rq=`date +%Y%m%d` mv ${logs_path}${logs_access}.log ${logs_backup_path}/${logs_access}_${rq}.log mv ${logs_path}${logs_error}.log ${logs_backup_path}/${logs_error}_${rq}.log kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid) ``` 此脚本将每天的访问日志和错误日志分别重命名并存储到对应的备份目录中,然后向Nginx主进程发送`USR1`信号,使其重新打开日志文件[^2]。 - **脚本二**: ```bash #!/bin/bash ## 假设nginx日志存放路径为/data/logs/ d=`date -d "-1 day" +%Y%m%d` logdir="/data/logs" nginx_pid="/usr/local/nginx/logs/nginx.pid" cd $logdir for log in `ls *.log` do mv $log $log-$d done /bin/kill -HUP `cat $nginx_pid` ``` 该脚本通过循环遍历日志目录下的所有日志文件,将其重命名为包含昨天日期的文件名,最后向Nginx主进程发送`HUP`信号,重新加载配置并生成新的日志文件[^2]。 #### 另一种脚本切割方式 ```bash #!/bin/bash current_path=/var/log/nginx YEAR=$(date +%Y) MONTH=$(date +%m) DAY=$(date +%d) YESTERDAY=$(date -d "yesterday" +%Y-%m-%d) LOGS_PATH=$current_path/../logs LOGS_BAK_PATH=$current_path/../logs/logs-bak # 得到1级目录名 if [[ $(($DAY)) -eq 1 ]] then if [[ $(($MONTH)) -eq 1 ]] then LOGS_BAK_PATH=$LOGS_BAK_PATH/$((${YEAR}-1))-12 else if [[ $(($MONTH)) -gt 10 ]] then LOGS_BAK_PATH=$LOGS_BAK_PATH/${YEAR}-$((${MONTH}-1)) else LOGS_BAK_PATH=$LOGS_BAK_PATH/${YEAR}-0$((${MONTH}-1)) fi fi else LOGS_BAK_PATH=$LOGS_BAK_PATH/${YEAR}-${MONTH} fi # 创建目录 mkdir -p $LOGS_BAK_PATH/${YESTERDAY} # 复制当前的日志文件到备份的目录 cp ${LOGS_PATH}/access.log ${LOGS_BAK_PATH}/${YESTERDAY}/access_${YESTERDAY}.log cp ${LOGS_PATH}/error.log ${LOGS_BAK_PATH}/${YESTERDAY}/error_${YESTERDAY}.log # 清空日志 > ${LOGS_PATH}/access.log > ${LOGS_PATH}/error.log ``` 此脚本会根据日期创建相应的备份目录,将当前的访问日志和错误日志复制到备份目录中,并清空原日志文件[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值