tail -0f를 사용하여 Linux/AIX에서 여러 파일을 추적하는 방법

tail -0f를 사용하여 Linux/AIX에서 여러 파일을 추적하는 방법

다음 옵션을 사용하여 두 파일을 추적해 보았습니다.

tail -0f file1.log -0f file2.log

Linux에서는 "tail: 한 번에 하나의 파일만 처리할 수 있습니다"라는 오류가 표시됩니다.

AIX에서는 "잘못된 옵션"이라는 오류가 표시됩니다.

다음을 사용하면 잘 작동합니다.

tail -f file1 -f file 2

Linux에서는 있지만 AIX에서는 그렇지 않습니다.

-0fAIX/Linux에서 또는를 사용하여 여러 파일을 추적할 수 있기를 원합니다 .-f

multitail두 운영 체제 모두에서 인식되지 않습니다.

답변1

무엇에 대해:

tail -f file1 & tail -f file2

또는 각 줄에 파일 이름을 붙입니다:

tail -f file1 | sed 's/^/file1: /' &
tail -f file2 | sed 's/^/file2: /'

이름이 패턴과 일치하는 모든 파일을 추적하려면 tail -f다음과 같은 스크립트를 사용하여 이 작업을 수행할 수 있습니다(매초마다 파일에서 지속적으로 읽기) zsh.

#! /bin/zsh -
zmodload zsh/stat
zmodload zsh/zselect
zmodload zsh/system
set -o extendedglob

typeset -A tracked
typeset -F SECONDS=0

pattern=${1?}; shift

drain() {
  while sysread -s 65536 -i $1 -o 1; do
    continue
  done
}

for ((t = 1; ; t++)); do
  typeset -A still_there
  still_there=()
  for file in $^@/$~pattern(#q-.NoN); do
    stat -H stat -- $file || continue
    inode=$stat[device]:$stat[inode]
    if
      (($+tracked[$inode])) ||
        { exec {fd}< $file && tracked[$inode]=$fd; }
    then
      still_there[$inode]=
    fi
  done
  for inode fd in ${(kv)tracked}; do
    drain $fd
    if ! (($+still_there[$inode])); then
      exec {fd}<&-
      unset "tracked[$inode]"
    fi
  done
  ((t <= SECONDS)) || zselect -t $((((t - SECONDS) * 100) | 0))
done

예를 들어, 현재 디렉터리의 모든 텍스트 파일을 재귀적으로 추적하려면 다음을 수행하세요.

that-script '**/*.txt' .

답변2

OSX 및 Linux에서는 다음을 사용합니다.

tail -f <file1> <file2>

나에게 잘 작동합니다. 또 다른 이점은 다음과 같은 결과가 있다는 것입니다.

==> /srv/www/my-app/shared/log/nginx.access.log <==
things from log 1

==> /srv/www/my-app/shared/log/nginx.error.log <==
things from log 2

==> /srv/www/my-app/shared/log/nginx.access.log <==
new things from log 1

어떤 출력이 어떤 로그에서 나오는지 식별하는 데 도움이 됩니다.

답변3

tailGNU tail 버전은 여러 파일을 확장합니다. AIX의 경우 GNU tail이 없으므로 이를 수행할 수 없습니다. 대신 이것을 사용할 수 있습니다 multitail.

당신은 설치할 수 있습니다다중 꼬리Linux 및 AIX에서.

  • AIX의 경우 패키지를 다운로드할 수 있습니다.여기.

  • Linux에서는 multitail일반적으로 저장소에 있으므로 배포판의 패키지 관리자를 사용하여 쉽게 설치할 수 있습니다.

    • 데비안/우분투에서:apt-get install multitail
    • 센토스/페도라에서:yum install multitail

답변4

tmux두 개의 파일을 동시에 추적하는 데 사용할 수 있는 두 개의 서로 다른 창을 제공하는 코드 조각을 제공하겠습니다 .

tmux new-window -a -n Tail
tmux new-session -d -s Tail -n SSH0 -d
tmux selectp -t Tail

#This is tmux interactions with the user (colors of the tabs used, hot keys, etc.)
tmux bind-key -n M-Left previous-window -t WinSplit
tmux bind-key -n M-Right next-window -t WinSplit
tmux set-window-option -g monitor-activity on
tmux set -g visual-activity on
tmux set-window-option -g window-status-current-bg blue
tmux set-window-option -g window-status-fg red
tmux set -g pane-border-fg yellow
tmux set -g pane-active-border-bg red
tmux set -g message-fg yellow
tmux set -g message-bg red
tmux set -g message-attr bright
tmux set -g status-left "#[fg=red]#S"

#Names two seperate windows
tmux new-window -n tail1 -t Tail
tmux new-window -n tail2 -t Tail

#Now this will allow you to automatically run tail when this tmux script is run
tmux send-keys -t Tail:0 'tail -f file1.log' C-m
tmux send-keys -t Tail:1 'tail -f file2.log' C-m

업데이트: 를 사용하면 screen여러 세션을 연결/분리할 수 있으므로 tail여러 번 실행할 수도 있습니다. 나는 이것을 제안할 수 있다:

screen -s Tail_Server1.log

CTRL+A+D다음 으로 세션을 종료하지 않고 분리된 상태를 유지해야 합니다 .

screen -s Tail_Server2.log

두 화면 모두 별도로 실행되므로 이를 screens참조하여 screen --help두 화면을 terminal.

관련 정보