会社の Linux マシンで Plagger を使っていて、Subscription::LivedoorReader を mark_read: 1 にしている。
cron で 5分ごとに起動しているのだけど、そのまんまマシンを落とさずに帰ると、自宅から LDR が読めない。(Plagger が既読に設定しちゃうから)
退社する前にいちいち cron の設定を変えるのも面倒だし、ログインしてるときだけ起動したいということで
#!/bin/sh num=`last | head | grep "${LOGNAME}.*still logged in" | wc -l` if [ $num -ge 1 ]; then /path/to/plagger --config /path/to/config.yaml fi
こんな風にしてとりあえず目的は達成できるのだが……これも Plugin にするのが Plagger ぽくね? などと思ってしまった。
hook point は plugin.init でいいとして、しかし、適当な Namespace がないな。仮に WakeUp としておくとこんなので。
package Plagger::Plugin::WakeUp::LoggedIn; use strict; use base qw( Plagger::Plugin ); our $VERSION = '0.01'; sub register { my ($self, $context) = @_; $context->register_hook( $self, 'plugin.init' => \&logged_in, ); } sub logged_in { my ($self, $context, $args) = @_; my $user = $ENV{LOGNAME}; my @last = `last`; for my $l(@last[0..9]){ if( $l =~ /$user.*?still logged in/ ){ $context->log(info => "user $user logged in."); return 1; } } $context->log(info => "user $user not logged in."); exit; } 1;
- 需要があるのかどうか
- Load Average をみて、負荷が高ければ起動しない、とか? 微妙だ
- Win32だとどうやればいいのかな