missingok的作用是当日志文件不存在时,logrotate不报错、不中断,而是静默跳过该规则;它位于日志块内,用于容错处理路径缺失场景,与notifempty(跳过空文件)职责不同,二者可共存。

missingok 是 logrotate 中一个关键的容错参数,它的作用很直接:当配置中指定的日志路径不存在时,logrotate 不报错、不中断,而是安静跳过该段配置,继续处理其他规则。
missingok 的典型使用场景
这类情况很常见:
- 某个服务刚安装但尚未启动,日志文件还没生成(如
/var/log/myapp/app.log) - 服务被卸载或停用,日志目录被手动清理
- 容器化部署中,日志挂载路径临时不可达
- 多环境统一配置,但某些节点不运行对应服务
如何正确配置 missingok
它必须放在日志块内,且通常紧随路径定义之后。注意顺序无关,但建议靠前放置,便于阅读:
/var/log/nginx/access.log {<br> daily<br> missingok<br> rotate 7<br> compress<br> create 644 nginx nginx<br>}
如果日志文件 /var/log/nginx/access.log 当前不存在,logrotate 不会输出类似 error: error accessing /var/log/nginx/access.log: No such file or directory 的警告,也不会导致整个轮转流程失败。
对比 notifempty 和 missingok 的区别
这两个参数常被混淆,但职责完全不同:
- missingok:解决“文件路径根本不存在”的问题
- notifempty:解决“文件存在但内容为空”的问题(即空文件不轮转)
两者可以共存。例如,你既不想因文件缺失报错,也不想为零字节日志浪费一次轮转:
/var/log/myapp/debug.log {<br> size 10M<br> missingok<br> notifempty<br> rotate 5<br> compress<br>}
验证 missingok 是否生效
用 -d(debug)模式测试最可靠:
sudo logrotate -d /etc/logrotate.d/myapp
观察输出中是否出现 notice: skipping /var/log/myapp/debug.log because file does not exist 类似提示——有则说明 missingok 已起作用;若报错退出,则检查拼写(必须是 missingok,不是 missok 或 missing_ok)和位置(必须在对应日志块内)。











