我需要創建一個腳本來尾部被重新創建日誌文件(名稱相同)的解決方案達到一定規模後的日誌文件。如何使用尾巴查看經常重新
使用「尾-f」導致拖尾時停止該文件被重新創建/旋轉。
我想什麼做的是創建一個腳本,將尾部的文件,它達到100線,例如後然後重新啓動命令,甚至更好時,創建該文件,重新啓動命令?是這樣的可能嗎?
謝謝!
我需要創建一個腳本來尾部被重新創建日誌文件(名稱相同)的解決方案達到一定規模後的日誌文件。如何使用尾巴查看經常重新
使用「尾-f」導致拖尾時停止該文件被重新創建/旋轉。
我想什麼做的是創建一個腳本,將尾部的文件,它達到100線,例如後然後重新啓動命令,甚至更好時,創建該文件,重新啓動命令?是這樣的可能嗎?
謝謝!
嘗試運行
watch "tail -f" yourfile.log
是的!使用這個(重試將使尾重試時,文件不存在或不可訪問,而不僅僅是失敗 - 如可能,當你改變的文件):
tail -f --retry <filename>
OR
tail --follow=name --retry
OR
tail -F <filename>
既然你沒有支持所有功能的尾巴,並且你沒有看,你可以使用一個簡單的腳本無限循環執行尾部。
#!/bin/bash
PID=`mktemp`
while true;
do
[ -e "$1" ] && IO=`stat -c %i "$1"`
[ -e "$1" ] && echo "restarting tail" && { tail -f "$1" 2> /dev/null & echo $! > $PID; }
# as long as the file exists and the inode number did not change
while [[ -e "$1" ]] && [[ $IO = `stat -c %i "$1"` ]]
do
sleep 0.5
done
[ ! -z $PID ] && kill `cat $PID` 2> /dev/null && echo > $PID
sleep 0.5
done 2> /dev/null
rm -rf $PID
您可能需要使用陷阱完全退出此腳本。這取決於你。
Basicaly,這個腳本檢查inode號碼(使用stat -c %i "$1"
)是否改變來殺死tail
命令並在重新創建文件時啓動一個新的命令。
注意:您可能擺脫echo "restarting tail"
它會污染你的輸出。它僅用於測試。如果在檢查inode編號之後並且在開始尾部處理之前替換文件,也可能會出現問題。
如果尾巴-F是不可用,你正試圖從logrotate的恢復,您可以將copytruncate
選項添加到您的logrotate.d/
規範文件,以便代替旋轉後每次創建一個新的文件,該文件被保留並被截斷,而副本被旋出。
這樣舊的文件句柄繼續以指向新的日誌記錄在新(truncated)
日誌文件。
注意,有可能是在這個過程中copy-truncate
一些數據丟失。
手錶在我運行的系統上不可用 – gfunk