전체 디렉토리(새 디렉토리 포함)의 파일 감시(tail -f)

전체 디렉토리(새 디렉토리 포함)의 파일 감시(tail -f)

나는 일반적으로 디렉토리에 있는 많은 로그를 확인하여 이 작업을 수행합니다 tail -f directory/*. 문제는 새 로그가 생성되고 화면에 표시되지 않는다는 것입니다( *이미 확장되었기 때문입니다).

프로세스가 시작된 후에 생성된 파일까지 포함하여 디렉터리의 모든 파일을 모니터링할 수 있는 방법이 있습니까?

답변1

당신은 할 수꼬리 많은여러 파일과...다중 꼬리.

multitail -Q 1 'directory/*'

-Q 1 PATTERN기존 파일이나 새 파일에 일치하는 새 콘텐츠가 있는지 확인하는 것을 나타냅니다.무늬1초마다. 파일의 모든 행은 별도의 창이 -q아닌 동일한 창에 표시됩니다 -Q.

답변2

xtail또한 대안. 매뉴얼 페이지에서는 다음과 같이 설명합니다.

Xtail은 하나 이상의 파일을 모니터링하고 명령이 호출된 이후 파일에 기록된 모든 데이터를 표시합니다. 여러 로그 파일을 동시에 모니터링하는 데 유용합니다. 명령줄에 제공된 항목이 디렉터리인 경우 xtail이 호출된 후 생성된 파일을 포함하여 해당 디렉터리의 모든 파일이 모니터링됩니다. 명령줄에 제공된 항목이 존재하지 않으면 xtail은 해당 항목을 감시하고 생성된 후 모니터링합니다. 디스플레이에서 파일을 전환하면 파일 경로 이름을 보여주는 배너가 인쇄됩니다.

구분 문자(일반적으로 CTRL/C 또는 DEL)는 모니터링 중인 최근 수정된 파일 목록을 표시합니다. xtail을 중지하려면 종료 신호(일반적으로 CTRL/백슬래시)를 보냅니다.

답변3

다음을 사용하여 카탈로그를 볼 수도 있습니다.watch

watch -n0,1 "ls -lrt /directory/ | tail"

답변4

나는 필요를 채우기 위해 빠른 기사를 썼습니다.

#!/bin/bash
LOG_PATTERN=$1
BASE_DIR=$(dirname $LOG_PATTERN* | head -1)

run_thread (){
    echo Running thread
    tail -F $LOG_PATTERN* &
    THREAD_PID=$!
}

# When someone decides to stop the script - killall children
cleanup () {
    pgrep -P $$ | xargs -i kill {}
    exit
}

trap cleanup SIGHUP SIGINT SIGTERM

if [ $# -ne 1 ]; then
    echo "usage: $0 <directory/pattern without * in the end>"
    exit 1
fi

# Wait for the directory to be created
if [ ! -d $BASE_DIR ] ; then
    echo DIR $BASE_DIR does not exist, waiting for it...
    while [ ! -d $BASE_DIR ] ; do
        sleep 2
    done
    echo DIR $BASE_DIR is now online
fi

# count current number of files
OLD_NUM_OF_FILES=$(ls -l $LOG_PATTERN* 2>/dev/null | wc -l)

# Start Tailing
run_thread

while [ 1 ]; do
    # If files are added - retail
    NUM_FILES=$(ls -l $LOG_PATTERN* 2>/dev/null | wc -l)
    if [ $NUM_FILES -ne $OLD_NUM_OF_FILES ]; then
        OLD_NUM_OF_FILES=$NUM_FILES
        kill $THREAD_PID
        run_thread
    fi
    sleep 1
done

관련 정보