步骤一:确认 logrotate 和 Apache 相关配置情况

  1. 检查 logrotate 是否已安装
    在 Debian 系统中,可以通过以下命令来确认 logrotate 是否已安装:

        如果没有安装,则可以使用以下命令进行安装:

  1. 查看 Apache 日志文件的位置
    Apache 默认的访问日志文件通常是 /var/log/apache2/access.log,错误日志文件通常是 /var/log/apache2/error.log(不同的 Debian 版本或者特定配置下可能会稍有不同)。可以通过查看 Apache 的配置文件来确认,比如打开主配置文件 /etc/apache2/apache2.conf 或者查看相关的虚拟主机配置文件(在 /etc/apache2/sites-available/ 目录下的 .conf 文件中查找),查找类似 CustomLog 和 ErrorLog 等指令指定的日志文件路径。

步骤二:创建 logrotate 配置文件(如果没有现成可用的)

  1. 创建配置文件
    在 /etc/logrotate.d/ 目录下创建一个专门用于 Apache 日志轮转的配置文件,文件名可以自行定义,比如命名为 apache2(文件名只要符合文件名规范且便于识别就行),使用文本编辑器(如 nano 或 vim)创建并编辑该文件,命令如下:
  1. 配置文件内容填写
    在打开的文件中添加以下基础的配置内容示例(可根据实际需求调整):
以下是对上述配置内容各部分的详细解释:
  • /var/log/apache2/*.log:指定要进行轮转的日志文件路径和文件名模式,这里表示 /var/log/apache2/ 目录下所有以 .log 为扩展名的文件,也就是涵盖了 Apache 的各类日志文件(访问日志、错误日志等)。
  • daily:设置轮转周期为每天,还可以选择其他选项如 weekly(每周)、monthly(每月)等,根据实际需求来定。
  • rotate 14:表示最多保留 14份轮转后的旧日志文件,当轮转次数超过这个数字时,最旧的日志文件会被删除。
  • missingok:如果要轮转的日志文件不存在,忽略这个错误,继续执行其他操作,而不会报错中断。
  • notifempty:如果日志文件为空,即没有记录任何内容,就不进行轮转操作。
  • compress:对轮转后的旧日志文件进行压缩(通常使用 gzip 压缩),以节省磁盘空间,压缩后的日志文件名会变成类似 access.log.1.gz 的形式。
  • create 640 root adm:在每次轮转创建新的日志文件时,设置新日志文件的权限为 640(所有者可读可写,所属组可读,其他用户无权限),所有者为 root,所属组为 adm。
  • sharedscripts:如果有多个日志文件匹配前面指定的路径和文件名模式,只在所有文件都轮转完后执行一次后续的脚本(比如重启或重新加载 Apache 服务相关脚本),而不是每个文件轮转后都执行一次。
  • postrotate 和 endrotate:这是一对指令,中间包裹的内容是在日志文件轮转完成后需要执行的脚本内容。这里主要是为了让 Apache 重新加载配置或者重启(优雅重启,尽量不中断现有连接),以确保它开始使用新的日志文件记录日志。具体是通过判断系统中存在 apache2ctl 工具(Debian 系统中常用)还是 httpd 工具(其他一些基于 Red Hat 系的系统常用)来执行相应的优雅重启命令。

步骤三:验证和手动触发轮转测试

  1. 验证配置文件语法是否正确
    可以使用 logrotate 的测试模式来检查刚刚创建的配置文件语法是否正确,命令如下:
-d 选项表示调试(debug)模式,执行该命令后,logrotate 会模拟执行一遍轮转操作,但并不会真正修改任何文件,只是在终端输出操作过程以及是否有语法错误等提示信息,如果看到有报错信息,需要根据提示返回去检查和修改配置文件内容。
  1. 手动触发一次日志轮转(可选)
    如果配置文件语法验证通过,可以手动触发一次日志轮转操作来看看实际效果,命令如下:
执行完这个命令后,可以到 /var/log/apache2/ 目录下查看日志文件的变化情况,比如是否生成了轮转后的旧日志文件(如果配置了压缩,是否有压缩后的文件出现),以及 Apache 服务是否正常继续使用新的日志文件进行记录等情况。

步骤四:设置自动执行(依赖系统自带的定时任务机制)

通常情况下,系统会自动定期(比如每天、每周等,取决于系统的默认配置)执行 logrotate 的相关操作,这是依靠系统自带的 cron 或者 systemd 定时器等机制来实现的。
在 Debian 系统中,logrotate 一般会通过 /etc/cron.daily/logrotate 这个 cron 任务脚本来每天执行一次轮转操作(前提是系统的 cron 服务正常运行),你无需额外设置就可以让日志轮转按照配置文件中设定的规则自动进行下去。