次のオプションを使用して2つのファイルを追跡してみました。
tail -0f file1.log -0f file2.log
Linuxでは、「tail:一度に1つのファイルしか処理できません」というエラーが表示されます。
AIX では、「無効なオプション」というエラーが表示されます。
以下を使用するとうまくいきます。
tail -f file1 -f file 2
Linuxではありますが、AIXではそうではありません。
-0f
AIX / 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
tail
GNUテールバージョンは複数のファイルを拡張します。 AIXでは、GNUテールがないため、これを行うことはできません。代わりにこれを使用できますmultitail
。
あなたはインストールすることができますマルチテールLinuxとAIXでは。
AIXの場合は、パッケージをダウンロードできます。ここ。
Linuxでは
multitail
通常リポジトリにあるので、ディストリビューションのパッケージマネージャを使用して簡単にインストールできます。- Debian/Ubuntu から:
apt-get install multitail
- セントース/フェドラから:
yum install multitail
- Debian/Ubuntu から:
答え4
tmux
2つのファイルを同時に追跡するために使用できる2つの異なるウィンドウを提供するコードを提供します。
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
。