Linux 命令 管道 緩衝區

壹頁書發表於2018-11-08

這是王工的一個問題.

MySQL監控指標.使用 mysqladmin 每秒間隔獲取資訊, 將資訊格式化後輸出檔案.


獲取資訊和格式化的命令


   mysqladmin -uroot -proot -S mysql.sock ext -i1| awk '/Queries/{q=$4-qp;qp=$4}/Threads_connected/{tc=$4}/Threads_running/{printf "%5d %5d %5d\n", q, tc, $4}'



這個命令單獨執行是可以的.


但是如果要重定向到檔案,這個資訊就不是實時的.需要延遲十幾秒才能寫入檔案.


 mysqladmin -uroot -proot -S mysql.sock ext -i1| awk '/Queries/{q=$4-qp;qp=$4}/Threads_connected/{tc=$4}/Threads_running/{printf "%5d %5d %5d\n", q, tc, $4}' > a.log


為什麼直接執行命令就可以實時輸出,但是重定向就是延遲輸出了呢?

這個問題應該在tail -f 也是存在的


經過資料查詢,發現是緩衝區的問題


相關連結:




所以改寫命令就可以實現實時輸出的需求了


 mysqladmin -uroot -proot -S mysql.sock ext -i1 | stdbuf -oL  awk '/Queries/{q=$4-qp;qp=$4}/Threads_connected/{tc=$4}/Threads_running/{printf "%5d %5d %5d\n", q, tc, $4}' > /tmp/mysql.log




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2219282/,如需轉載,請註明出處,否則將追究法律責任。

相關文章