Site icon Mr. 沙先生

茶包專欄:為何 clientmqueue 會佔滿系統 inode

本身在維護的系統偶爾會有 inode 滿的問題,但實際上過去維護過的系統很少遇到 inode 會有滿的情況,所以這篇就來講一下到底是發生什麼事情 …

一般情況都是小檔太多造成 inode 滿,但身為系統管理者,該系統的應用情境應該不致於讓你無法預期會有這種情況,所以這邊講的是特殊的例外情況造成 inode 滿。

透過 df / du 這個工具可以輕鬆檢測到 inode 佔用的情況

df 檢查硬碟 inode 使用狀況

$ df -i

du 檢查目錄 inode 使用狀況

du 常常用來檢查硬碟使用占比,用來檢查 inode 也很好用

$ du --inode --max-depth=1

檢查後發現吃滿 inode 是在於 /var/spool/clientmqueue 這裡面的檔案數量驚人!仔細查看 clientmqueue 裡面的內容發現是因為當執行 cron 的時候沒有指定好 command stderr / stdout 的重新定向就會跑到 clientmqueue 這邊來,當你的 cron 很頻繁的執行,而裡面的 script 都沒有處理好 stderr / stdout 就會吃爆 clientmqueue。

常見的錯誤寫法

curl https://www.google.com.tw >/dev/null


正確寫法

curl https://www.google.com.tw >/dev/null 2>&1

如果偶爾看到「You have new mail in /var/spool/mail/root」也是沒寫好,遇到一直寄發 mail 給 root 塞爆 /var/spool/mail/root 的情況

Exit mobile version