在日常运维工作中,服务器日志的管理是个绕不开的话题。系统服务、应用后台、安全审计等都会持续产生日志,时间一长,磁盘空间容易被占满。为了解决这个问题,Linux 系统普遍采用 logrotate 工具来进行日志轮转——也就是把旧日志归档、压缩、删除,腾出空间给新日志。
配置 logrotate 时,你可能见过一个叫 missingok 的选项。它看起来不起眼,但在实际使用中却能避免不少麻烦。
missingok 是干什么的?
简单来说,missingok 的作用是告诉 logrotate:如果要轮转的日志文件不存在,别报错,继续往下执行。
举个例子,你的 Nginx 访问日志通常在 /var/log/nginx/access.log,但某次部署时忘记创建日志目录,或者服务还没启动,这个文件就不存在。默认情况下,logrotate 会认为这是个错误,记录一条警告甚至发邮件提醒管理员。
如果你加了 missingok,即使文件没找到,也不会中断整个轮转流程,其他正常的日志照样处理。
怎么用?
在 logrotate 配置文件里加上这一行就行。比如 Nginx 的配置通常长这样:
/var/log/nginx/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
systemctl reload nginx > /dev/null 2>- & || true
endscript
}
这里的 missingok 就确保了即使某个日志文件暂时缺失,也不会导致整个轮转任务失败。
什么情况下该用 missingok?
大多数场景下都建议开启。比如:
- 应用不是 24 小时运行,日志是按需生成的;
- 多个服务共用一套轮转规则,但某些服务可能未部署;
- 测试环境或开发机,日志路径可能不完整。
相反,如果你特别关注某个关键日志是否丢失,比如安全审计日志,那反而不该加 missingok,让它在文件异常消失时报错,及时引起注意。
说白了,missingok 是一种“容错”机制,让日志轮转更适应现实中的各种小意外,而不是因为一个文件没找到就闹脾气。