読者です 読者をやめる 読者になる 読者になる

Plaggerの起床をコントロールしたい(?)

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