如何在 Linux 上设置 Logrotate(防止服务器空间不足)如何在 Linux 上设置 Logrotate(防止服务器空间不足)如何在 Linux 上设置 Logrotate(防止服务器空间不足)如何在 Linux 上设置 Logrotate(防止服务器空间不足)
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Linux 上设置 Logrotate(防止服务器空间不足)

Linux 上的大部分服务都会生成日志文件,一般存放在/var/log/。这些只是简单的文本文件,但它们可能会变得非常非常大,以至于您可能会耗尽服务器空间。

Logrotate 有什么作用?

Logrotate 有助于管理日志文件,并防止它们堆积。它会自动归档当前的日志文件,制作一个新的空文件,并在轮换几次后删除真正旧的档案。默认时间可能设置得非常高(nginx 默认为一年的日志),因此如果您不编辑配置文件,您可能会遇到问题。

您的文件大小会因服务而异,您需要相应地配置 logrotate。如果您想了解每个服务占用了多少日志空间,您可以使用 du 命令:

du -h /var/log/ | sort -hr

几乎所有的日志文件都在 /var/log/ 中,因此 du 将汇总所有日志文件,并将它们显示在一个漂亮的列表中(由 提供) sort -hr 用于“人类可读”):

这仅显示目录,因此您需要使用 ls -sh 来查找单个文件的大小。

通常,Web 服务器(apache2、nginx 等)和其他接收大量交互的应用程序会生成大量日志文件,但确切的大小将取决于它们实际记录到磁盘的数据量。

安装 Logrotate(如果您还没有)

默认情况下,您可能不需要做任何设置 logrotate,因为它默认安装在许多发行版上,并且生成大量日志文件的服务(nginx、apache 等)通常会预先配置 logrotate 配置。

您可以检查是否安装了 logrotate:

which logrotate

或者如果没有的话,从你的发行版的包管理器安装它。对于像 Ubuntu 这样的基于 Debian 的系统,这将是:

sudo apt-get install logrotate

Logrotate 将自动安装其默认全局配置,但如果您在安装 Web 服务器后安装了它,则如果未生成该服务的默认配置,您可能必须重新安装 Web 服务器。

Logrotate 如何运作

虽然 logrotate 将针对 nginx 和 apache2 等流行服务进行预配置,但您可能希望手动设置配置,或编辑默认配置。

logrotate 的全局配置存储在 /etc/logrotate.conf 中,但您将使用存储在 /etc/logrotate.d/ 中的每个应用程序配置文件覆盖大部分配置 目录。让我们看一下 nginx 在 /etc/logrotate.d/nginx 中的默认配置,您可以将其用作将新应用程序添加到 logrotate 的模板:

/var/log/nginx/*.log {
        weekly
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        create 0640 www-data adm
        sharedscripts
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then 
                        run-parts /etc/logrotate.d/httpd-prerotate; 
                fi 
        endscript
        postrotate
                invoke-rc.d nginx rotate >/dev/null 2>&1
        endscript
}

第一行开始该块,并告诉 logrotate 要查找哪些文件。通配符 *.log 将匹配 nginx 日志文件夹中以 .log 扩展名结尾的任何文件。您还可以在此处指定多个目录以将它们包含在相同的配置中。

weekly 将每周轮换一次日志。如果您想根据大小旋转它们,您可以使用 size 25M 在它们达到特定限制后旋转它们,在本例中为 25 兆字节。

missingok 如果日志文件被除 logrotate 以外的任何其他方式删除,将防止 logrotate 抛出错误。

rotate 52将保留 52 个不同的日志文件。在这种情况下,由于它将每周轮换一次,因此 logrotate 将在删除旧文件之前保留一整年的日志文件。您可以将其更改为 rotate 4 以仅保留一个月的日志文件。

compress 将压缩旧日志文件以节省空间。这会导致某些应用程序在 logrotate 仍在执行其操作时继续写入日志文件的问题,因此您可以添加 delaycompress 标志以在压缩前留下一个旧日志文件的缓冲区。

notifempty 是另一个检查标志,用于确保 logrotate 仅在写入新日志文件时运行。 create 标志使这些新的日志文件具有特定的权限。语法是 create [mode] [owner] [group]。

您需要确保这些匹配您当前配置的任何日志文件,您可以使用 ls -la 执行此操作:

请注意,您需要将模式转换为八进制,因此 -rw-r----- 变为 0640。这里 nginx 的所有者是 www-data,组是 adm。

sharedscripts 指定 prerotate 和 postrotate 挂钩每次轮换仅运行一次,而不是为每个轮换的日志文件运行一次。这些挂钩是您可以在旋转前后调用的脚本。默认情况下,这些将运行一些脚本来配置 nginx 以切换日志文件。如果您配置的服务无法热加载新的日志文件,您将希望在这些挂钩中停止并重新启动它。钩子不必与服务交互;例如,您可以使用 prerotate 挂钩在日志文件被删除之前通过 s3cmd 将您的日志文件备份到 AWS S3。

Logrotate 将自行管理运行,因此您无需担心在启动时启动服务或配置 cron 作业。只需将每个应用程序的配置文件放在 /etc/logrotate.d/ 中,再也不用担心日志了。

©2015-2025 艾丽卡 support@alaica.com