Growlしたい!というときは次のようにやってます。
概要
- リモートで growl 専用のログファイルを準備する。
- ローカルからリモートに ssh で接続し、tail -f でログファイルの監視する。
- リモート側では、そのログファイルに対して Growl させたい内容をリダイレクトを使って追記する
- 追記された内容が出力されるので、その出力をローカルのLLで行ごとに読み込む。
- 読み込んだ行を growlnotify を起動して通知する
これだけ。growlnotify が必要なので Growl のディスクイメージの Extras フォルダから事前にインストールしておく。
手順
ステップ1 - リモートで
$ echo 'foo' > $HOME/growler.log
このように、ログファイル(通知させたい内容を追記するファイル)を作成しておく。
ステップ2 - ローカルで
$ ssh example@example.com tail -n 1 -f '$HOME/growler.log' | perl -e 'system "growlnotify", "-m", $_ while (<STDIN>);'
この例では example.com に ssh でログインし、ログファイルを tail -f で監視する。標準出力が pipe によって perl に流れるので、それを受信して growlnotify を起動する。これによってファイルの最終行が growl され、接続できているか確認できる。
ステップ3 - リモートで
$ echo 'hoge' >> $HOME/growler.log $ ls >> $HOME/growler.log
このように標準出力をログファイルに追記するだけでgrowl通知ができる!
応用
とても時間のかかる処理をさせている間に別の処理をしたい場合
cpan-outdated -p | cpanm; echo 'upgraded' >> $HOME/growler.log
としておくと、処理が終わったときに通知してくれます。
ログファイルを吐き出すIRCクライアント(この場合は weechat )をリモートの screen 上で実行している場合
ssh example@example.com tail -n 1 -f '$HOME/.weechat/logs/*/*/*.weechatlog' | perl irc_growl.pl &
としてサーバにつなげて irc_growl.pl で処理を加えた上で growl させることもできる。irc_growl.pl では、--appIcon に LimeChat を指定することで Growl 時のアイコンを変更している。
ssh のコマンドが長いと感じたら、.bashrc に alias を設定しておくと良い。参考に irc_growl.pl を貼りつけておく。
irc_growl.pl
while (<STDIN>) {
chomp;
next unless $_;
next if /^==>/; # ignore tail's output
my $attr = parse($_);
if ($attr->{type} =~ /(:?NOTICE|PRIVMSG)/) {
system("growlnotify", "-m", $attr->{content}, "-t", $attr->{user}, "--appIcon", "LimeChat");
}
}
sub parse {
my ($line) = @_;
my ($time, $cmd, @contents) = split /\t/, $line;
my $content = join "\t", @contents;
my $user;
if (not $cmd) { # critical error
$cmd = 'ERROR';
} elsif ($cmd eq '-->') { # join
$cmd = 'JOIN';
} elsif ($cmd eq '<--') { # part
$cmd = 'PART';
} elsif ($cmd eq '--') { # messages from server
$cmd = 'SERVER';
} elsif ($cmd eq '*') { # notice
$user = $cmd;
$cmd = 'NOTICE';
} else { # privmsg
$user = $cmd;
$cmd = 'PRIVMSG';
}
return +{
type => $cmd,
time => $time,
content => $content,
user => $user,
};
}
やっぱりTCPでネットワーク通知したい場合
これで困ってないので調べていない。
sugyanさんが週末を犠牲にしてまで調べているのでしばしお待ちを!!