tokuhirom's Blog

複数ホストに ssh しながら tail -F するときにはこうしたらどう?

いろいろ方法があるとおもうのですが、以下のようなシェルスクリプトですませるのはどうでしょうか?

#!/bin/bash

function kill_children {
    # jobs -l | perl -ne 'print "kill $1\n" if /^\S+?\s+(\d+)/'  | sh;
    pkill -P $$;
    wait;
}

trap "kill_children" EXIT

HOSTS="192.168.1.1 192.168.1.2"

for host in $HOSTS
do
    ssh $host tail -F /service/foo/log/main/current &
done

wait

ちょっと箇条書きで解説すると以下のようなことをおこなっています。

非常にシンプルで、目的を達しているので、この方法はなかなか便利なのではないでしょうか。
(最初 perl で fork & exec でがんばろうとしてたけどこっちの方が簡単だとおもってやめた)

【20120828 追記】
https://twitter.com/a_rak/status/239164233219178496
pkill -P $$ の方がよさそうなのでさしかえた。

bashクックブック