UNIX系OSで、ものすごく限定された目的にしか使えない小ネタ
この記事は最初の投稿日から19年経過しています。内容が古い可能性があります。
標準入力に日時を付加して標準出力に出力する。(awk版)
定期的な間隔で情報出力するコマンド、かつ、日時を出力しないコマンドにおいて、時間を付加してログをとりたい時に使います。
strftime が使える awk のみ。GNU awk 等。
awk '{print strftime("%H:%M:%S")" "$0}'
使用例)
% vmstat 2 | awk '{print strftime("%H:%M:%S")" "$0}' 21:03:29 procs memory swap io system cpu 21:03:29 r b swpd free buff cache si so bi bo in cs us sy id wa 21:03:29 1 0 0 164988 36100 51204 0 0 1 10 117 108 1 4 94 2 21:03:31 0 0 0 164988 36100 51204 0 0 0 0 137 130 0 1 99 0 21:03:33 0 0 0 164988 36100 51204 0 0 0 24 103 105 0 0 98 2
標準入力に日時を付加して標準出力に出力する。(perl版)
GNU awk とかが使えないときに。
perl -ne '($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);print "$hour:$min:$sec $_";'
perl は、今ひとつわかってないので、もっといい方法があると思うのですが…。
使用例)
% vmstat 2 | perl -ne '($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);print "$hour:$min:$sec $_";' 21:6:2 procs memory swap io system cpu 21:6:2 r b swpd free buff cache si so bi bo in cs us sy id wa 21:6:2 0 1 0 164020 36116 51204 0 0 1 10 117 108 1 4 94 2 21:6:4 0 0 0 164020 36140 52252 0 0 534 76 128 135 0 2 78 20 21:6:6 0 0 0 164020 36140 52252 0 0 0 0 102 88 0 0 100 0
定常的に動かすのであれば、logger にそのまま流し込んでもよさそうな気もします。
ファイルの修正年月でディレクトリを作成し、そこにファイルを移動するシェルスクリプト
たとえば、単一ディレクトリに大量のログファイルがあり、そのファイルを「年月」というディレクトリに振り分けたい時とかに使います。
#!/bin/sh find -name \*.log | while read file; do dirpath=`stat $file | grep Modify | awk '{print $2}' | sed 's/-..$//'`; mkdir $dirpath > /dev/null 2>&1 mv $file $dirpath done
cacti で、ntpd の状態を取得するためのシェルスクリプト
ものすごーく限定された状況用のシェルスクリプトです。cacti の話を書きたいのですが、色々整理しないと書けないので保留気味。
このシェルスクリプトを使って ntpd の状態を cacti に取り込み、グラフ化してます。
下記は、ntp1.jst.mfeed.ad.jp、ntp2.jst.mfeed.ad.jp、ntp3.jst.mfeed.ad.jp と同期を取っている場合。
#!/bin/sh /usr/sbin/ntpq -p localhost | awk '{ if (NR != 1 || NR != 2) { if ($1 ~ ".ntp1\.jst\.mfeed") { delay1 = $8 offset1 = $9 jitter1 = $10 } else if ($1 ~ ".ntp2\.jst\.mfeed") { delay2 = $8 offset2 = $9 jitter2 = $10 } else if ($1 ~ ".ntp3\.jst\.mfeed") { delay3 = $8 offset3 = $9 jitter3 = $10 } } } END { printf("delay1:%s delay2:%s delay3:%s offset1:%s offset2:%s offset3:%s jitter1:%s jitter2:%s jitter3:%s", delay1, delay2, delay3, offset1, offset2, offset3, jitter1, jitter2, jitter3) }'
使用例)
% ntpq -p localhost remote refid st t when poll reach delay offset jitter ============================================================================== +ntp1.jst.mfeed. fs-monntp1.mfee 2 u 947 1024 377 30.160 -6.799 2.879 *ntp2.jst.mfeed. fs-monntp2.mfee 2 u 437 1024 377 20.076 -3.638 2.882 +ntp3.jst.mfeed. fs-monntp2.mfee 2 u 444 1024 377 20.110 -2.601 3.970 % ./ntpstat.sh delay1:30.160 delay2:20.076 delay3:20.110 offset1:-6.799 offset2:-3.638 offset3:-2.601 jitter1:2.879 jitter2:2.882 jitter3:3.970