Bash

在文件名中連續拖尾帶有日期和時間的旋轉日誌文件

  • February 26, 2017

我有一個格式的日誌文件log_name_YY-MM-DD_HH_mm.log。日誌每隔幾個小時輪換一次,並創建包含創建日期和時間的新日誌。有時我需要使用tail -f命令跟踪此日誌的實時輸出。日誌旋轉後,tail 仍指向舊文件名,必須使用新文件名手動重新啟動。

有沒有辦法自動切換tail -f到使用新文件?在這種情況下,tail -F選項 ( tail --follow=name --retry) 不起作用,因為日誌的文件名發生了變化。

您可以創建一個腳本在後台跟踪最新的日誌文件,然後定期檢查新的日誌文件。如果有新的日誌文件,則終止舊程序並開始跟踪新文件。

就像是:

#!/bin/bash

PATTERN='log_name_??-??-??_??_??.log'

CURRENT=any_pattern # dummy pattern to start off first tail -f

while true; do
  NEWLOG=`ls -t $PATTERN|head -n1`
  if [[ $NEWLOG != $CURRENT ]]
  then
     kill $TAILPID 2>/dev/null
     CURRENT=$NEWLOG
     tail -f $CURRENT &
     TAILPID=$!
  fi
  sleep 1 # check regularly
done

引用自:https://serverfault.com/questions/834908