会社の 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だとどうやればいいのかな