大家好,我是B站 大衣哥编程,今天给大家介绍下Linux下/var/log目录及logratate工作方式,如果您对编程感兴趣,特别是C/C++、C#、Java、Go分布式、流媒体、数据库等,可戳:超实用:C++/Java/C#/数据库/网络:编程开发实战分享

详细解释
logrotate 的工作方式:

logrotate 不是一个会“智能扫描”整个 /var/log/ 目录并清理所有文件的魔法工具。

它只会严格按照其配置文件(/etc/logrotate.conf 和 /etc/logrotate.d/ 下的所有文件)中明确指定的路径去处理日志。

因为它无法判断一个未知目录下的文件是否重要、应该保留多久。

默认配置包含什么?

系统的默认配置通常只包含核心系统服务和应用,比如 syslog、rsyslog、nginx、apache2、mysql-server 等。这些应用在安装时,它们的软件包通常会自动在 /etc/logrotate.d/ 目录下生成一个对应的配置文件。

强烈推荐的最佳实践
你应该主动为你的应用程序配置 logrotate 规则。这是符合 Linux 系统管理规范的做法。

操作步骤:

使用 root 权限创建一个配置文件:

sudo vim /etc/logrotate.d/my-hser-app
在该文件中输入以下内容(这是一个通用示例,你可以根据需求调整):

/var/log/hser/*.log {
daily # 每天轮替一次(也可用 weekly、monthly)
missingok # 如果日志文件不存在,不报错,继续处理下一个
rotate 30 # 保留30份轮替后的日志文件
compress # 轮替后,使用gzip压缩旧日志
delaycompress # 延迟压缩,最近一次轮替的文件不压缩(方便查看)
notifempty # 如果日志文件是空的,则不执行轮替
copytruncate # 复制当前日志文件后将其截断,而不是移动和重建
# 这个选项对于不支持接收信号的程序很友好,可以替代 create 和 postrotate
# create 644 root root # 如果不用 copytruncate,可以用这个指定新文件的权限和属主
}
关键参数说明:

rotate 30:决定保留多少份历史日志。30 表示保留 30 天(如果 daily)的日志。

compress:非常重要,能极大节省磁盘空间。

copytruncate:这是一个非常实用的参数。有些应用程序会一直打开文件句柄写日志,标准的“移动并创建新文件”的方式可能会导致日志仍然写入到被移动走的那个文件中。copytruncate 的工作方式是先复制一份当前日志,然后清空原文件,兼容性更好。对于大多数情况,建议使用这个选项。

保存退出后,你可以手动测试一下这个配置是否正确:

sudo logrotate -vf /etc/logrotate.d/my-hser-app
-v:详细输出

-f:强制运行

强烈建议亲自验证下,体验下logrotate功能

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐