Bash

什麼可能導致日誌文件在寫入期間被截斷?

  • December 9, 2019

在我的工作場所,我繼承了管理 Web 伺服器的責任。它是一個 CentOS Linux 虛擬機,在 Amazon AWS EC2 上執行。除了提供網頁服務外,還有一堆計劃任務、後台處理和數據庫操作。

剛才我正在手動執行一個呼叫 Oracle SQL*Plus 的 Bash 腳本,該腳本讀取一個帶有大量 UPDATE 語句的 SQL 腳本並呼叫以刷新物化視圖。也許這些都不相關,但我想提供一些背景資訊。

Bash 腳本將輸出寫入 中的日誌文件/tmp,我正在使用該命令tail -f output.log監視輸出。它執行了很長時間 - 可能是 20 分鐘 - 輸出緩慢出現在我的終端中,但隨後我收到一條消息:tail: output.log: file truncatedBash 腳本停止執行。日誌文件存在,/tmp但它的大小為 0。我希望詳細查看日誌文件以查看報告了哪些數據庫錯誤,以便修復問題。

我的問題是,什麼可能導致此文件截斷發生?我不認為文件本身很大——只有 200 行。這對我來說是全新的,我真的不知道從哪裡開始,或者懷疑什麼是潛在的問題。

雖然不太可能配置為在 /tmp 中執行,但 logrotate 工具可能會在執行文件輪換時截斷文件。

此外,如果一個程序在沒有附加標誌的情況下寫入文件,這也會導致它截斷文件。在 bash 中,這是單個 ‘>’ 和雙 ‘>>’ 之間的區別。在其他語言中,它是“a”模式而不是“w”模式。這完全取決於寫入日誌的程序。

引用自:https://unix.stackexchange.com/questions/556354