nginx

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > nginx > Nginx日志切割

使用Bash脚本和Logrotate实现Nginx日志切割的方法

作者:我的名字o

Logrotate是一个Linux系统上用来管理日志文件的工具,它可以定期轮转日志文件、压缩旧的日志文件以及删除过期的日志文件,这篇文章主要介绍了使用Bash脚本和Logrotate实现Nginx日志切割,需要的朋友可以参考下

Nginx是一个广泛使用的高性能Web服务器,它能够处理大量的并发连接,但同时也会生成大量的日志文件。为了有效管理这些日志文件并确保系统的正常运行,我们需要定期对Nginx的日志文件进行切割和归档。本文将介绍如何使用Bash脚本和Logrotate来实现Nginx日志的切割。

Bash脚本实现

假设Nginx的访问日志文件位于/var/log/nginx/access.log

#!/bin/bash
LOG_FILE="/var/log/nginx/access.log"
ARCHIVE_DIR="/var/log/nginx/archive"
# 判断归档目录是否存在,如果不存在则创建
if [ ! -d "$ARCHIVE_DIR" ]; then
    mkdir -p $ARCHIVE_DIR
fi
# 使用gzip压缩日志文件并移动到归档目录
DATE=$(date +"%Y%m%d%H%M%S")
mv $LOG_FILE "$ARCHIVE_DIR/access_$DATE.log"
gzip "$ARCHIVE_DIR/access_$DATE.log"
# 重新打开日志文件,以便Nginx继续写入新的日志
kill -USR1 $(cat /var/run/nginx.pid)

以上脚本的功能包括:

Logrotate实现

Logrotate是一个Linux系统上用来管理日志文件的工具,它可以定期轮转日志文件、压缩旧的日志文件以及删除过期的日志文件。Logrotate通过配置文件定义轮转规则,并由系统的cron任务周期性地执行。

假设Nginx的有两个访问日志文件分为位于

在/etc/logrotate.d目录下创建一个名为nginx的文件,并添加以下内容

/apps/openresty/nginx/logs/head/access.log
/apps/openresty/nginx/logs/domain/access.log
{
        daily                        # 每天切割
        missingok                    # 忽略错误
        rotate 7                    # 最多保留多少个存档
        compress                     # 切割后且压缩
        delaycompress                # 延迟压缩动作在下一次切割
        notifempty                   # 日志为空就不切割
        create 640 qhdrsj qhdrsj     # 切割的文件权限
        sharedscripts                # 共享脚本,结果为空
        postrotate                   # 收尾动作,重新生成nginx日志
                if [ -f /apps/openresty/nginx/logs/domain/nginx.pid ]; then
                        kill -USR1 `cat /apps/openresty/nginx/logs/domain/nginx.pid`
                fi
                if [ -f /apps/openresty/nginx/logs/head/nginx.pid ]; then
                        kill -USR1 `cat /apps/openresty/nginx/logs/head/nginx.pid`
                fi
        endscript                    # 结束动作
}

以上配置的含义如下:

到此这篇关于使用Bash脚本和Logrotate实现Nginx日志切割的文章就介绍到这了,更多相关Nginx日志切割内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文