Linux + 如何自动压缩旧日志文件

Linux + 如何自动压缩旧日志文件

在文件夹下/var/log/httpd,创建了巨大容量的文件!

我可以使用什么解决方案来自动压缩旧文件(可以logrotate处理这个问题)?

如果是,如何配置Linux机器以压缩该文件夹下的旧文件?

第二个问题:这些文件的含义是什么?

  13:16:50 root@BillGates-Machine:/var/log/httpd # ls -ltr
  -rw-r--r-- 1 root root      7612 Jan 30 05:51 ssl_error_log-20160131
  -rw-r--r-- 1 root root  16170199 Jan 31 03:29 ssl_request_log-20160131
  -rw-r--r-- 1 root root  14677353 Jan 31 03:29 ssl_access_log-20160131
  -rw-r--r-- 1 root root 425621646 Jan 31 03:38 access_log-20160131
  -rw-r--r-- 1 root root     77267 Jan 31 03:38 error_log-20160131
  -rw-r--r-- 1 root root     11233 Feb  7 03:43 ssl_error_log-20160207
  -rw-r--r-- 1 root root  16398688 Feb  7 03:44 ssl_request_log-20160207
  -rw-r--r-- 1 root root  14867381 Feb  7 03:44 ssl_access_log-20160207
  -rw-r--r-- 1 root root 471057664 Feb  7 03:48 access_log-20160207
  -rw-r--r-- 1 root root    101611 Feb  7 03:48 error_log-20160207

答案1

logrotate可以压缩它轮换的文件,但是当应用程序写入的日志文件名不是静态时(由于文件名中的日期后缀,就像这里的情况一样),它不能很好地工作。如果您重新配置 HTTP 服务器(Apache?),使其不包含日期后缀(即它只会写入等),则access_log可以使用。error_loglogrotate这是一个示例解决方案,说明如何像这样配置它。

这是另一个相关问题,如果您希望保留日志文件命名方案,它也有一个解决方案。它不使用 logrotate,而是使用自定义脚本来完成该作业。

简而言之,这些文件的含义是

  • access_log:成功的纯 HTTP 请求
  • error_log:导致错误的纯 HTTP 请求
  • ssl_request_log:成功的 HTTPS 请求
  • ssl_error_log:导致错误的 HTTPS 请求

(当然你的配置可能会偏离这个逻辑)

答案2

您可以使用日志旋转。

一个示例应用程序配置设置是 dpkg(Debian 包管理系统),它存储在/etc/logrotate.d/dpkg.该文件中的条目之一是:

/var/log/dpkg.log {
      monthly
      size 500M
      rotate 12
      compress
      delaycompress
      missingok
      notifempty
      create 644 root root
}

教程这里

答案3

将压缩操作添加到 cron.将以下行添加到 root crontab ( sudo crontab -e):

0 0 * * * tar -czf /var/log/httpd_backup_`date`.tar.gz /var/log/httpd && rm -rf /var/log/httpd/*

此命令将使用旧日志创建 tar 存档并删除现有日志。工作每天0点开始。

相关内容