当前位置: 代码网 > 服务器>服务器>Nginx > 使用Bash脚本和Logrotate实现Nginx日志切割的方法

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

2024年06月12日 Nginx 我要评论
nginx是一个广泛使用的高性能web服务器,它能够处理大量的并发连接,但同时也会生成大量的日志文件。为了有效管理这些日志文件并确保系统的正常运行,我们需要定期对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)

以上脚本的功能包括:

  • 检查归档目录是否存在,如果不存在则创建。
  • 将当前的访问日志文件移动到归档目录,并使用gzip进行压缩。
  • 向nginx发送usr1信号,以便重新打开日志文件,使nginx能够继续写入新的日志。

logrotate实现

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

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

  • /apps/openresty/nginx/logs/head/access.log
  • /apps/openresty/nginx/logs/domain/access.log。

在/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                    # 结束动作
}

以上配置的含义如下:

  • daily:每天轮转一次日志。
  • missingok:如果日志文件不存在,则不报错。
  • rotate 7:保留最近的7个归档文件。
  • compress:使用gzip压缩轮转后的日志文件。
  • delaycompress:延迟压缩,直到下一次轮转时才压缩上一次的日志文件。
  • notifempty:如果日志文件为空,则不轮转。
  • create:设置新创建的日志文件的权限和属主。
  • sharedscripts:在所有日志文件轮转之后执行一次脚本。
  • postrotate和endscript:在轮转后执行的内容。

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com