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

在 Linux 中配置 Logrotate 忽略丢失的日志文件,核心就是使用 missingok 参数。它不是可有可无的修饰项,而是专门解决“路径不存在却导致轮转中断”这一实际痛点的关键开关。
missingok 的作用和适用场景
missingok 的作用非常明确:当 logrotate 尝试处理某个日志路径(如 /var/log/myapp/app.log)时,如果该文件或其所在目录根本不存在,logrotate 不会报错退出,也不会阻塞后续其他日志规则的执行,而是安静跳过这条配置。
常见需要它的场景包括:
- 服务刚安装但尚未启动,日志文件还没被创建出来
- 服务已被卸载或长期停用,相关日志目录被清理过
- 容器或临时环境里挂载的日志路径不可达或未就绪
- 统一部署多台机器,但部分节点不运行对应服务
正确写法和位置要求
missingok 必须放在对应日志路径的花括号块内,且属于该路径的专属配置项。它不依赖顺序,但建议紧随路径定义之后,便于维护:
/var/log/nginx/access.log {
daily
missingok
rotate 7
compress
create 644 nginx nginx
}
如果此时 /var/log/nginx/access.log 不存在,logrotate 运行时不会输出类似 error: error accessing /var/log/nginx/access.log: No such file or directory 的错误,整个流程照常继续。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
与 notifempty 的区别别混淆
missingok 和 notifempty 容易被混用,但职责完全不同:
- missingok:应对“文件路径压根没生成”的情况(不存在)
- notifempty:应对“文件存在但内容为空”的情况(空文件不轮转)
二者可以共存。例如你既不想因文件缺失中断,也不愿为零字节日志浪费一次轮转:
/var/log/myapp/debug.log {
size 10M
missingok
notifempty
rotate 5
compress
}
验证配置是否生效
最可靠的方式是用 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)
- 是否确实写在了对应日志块内部(不能放在全局段或别的路径块里)










