在我的工作场所,我继承了管理网络服务器的责任。它是一个 CentOS Linux 虚拟机,在 Amazon AWS EC2 上运行。除了提供网页之外,还会发生大量计划任务、后台处理和数据库操作。
刚才我正在手动运行一个调用 Oracle SQL*Plus 的 Bash 脚本,该脚本读取包含 UPDATE 语句负载的 SQL 脚本并调用刷新物化视图。也许这些都不相关,但我想提供一些背景信息。
Bash 脚本将输出写入 中的日志文件/tmp
,我使用该命令tail -f output.log
来监视输出。它运行了很长一段时间(也许 20 分钟),输出慢慢出现在我的终端中,但随后我收到一条消息:tail: output.log: file truncated
Bash 脚本停止运行。日志文件存在,/tmp
但大小为 0。我希望详细查看日志文件以查看报告了哪些数据库错误,这样我就可以修复问题。
我的问题是,什么可能导致此文件截断发生?我不认为文件本身很大——只有 200 行左右。这对我来说是全新的,我真的不知道从哪里开始,或者怀疑什么可能有问题。
答案1
尽管不太可能配置为在 /tmp 中运行,但 logrotate 工具在执行轮换时可能会截断文件。
此外,如果进程在没有附加标志的情况下写入文件,这也会导致它截断文件。在 bash 中,这是单个“>”和双“>>”之间的区别。在其他语言中,它是“a”模式而不是“w”模式。这完全取决于写入日志的进程。