共有メモリ

http://d.hatena.ne.jp/hideden/20080409/1207740439

のやつで、エラーログを眺めるだけのお仕事がめんどくさいから手を加えた。

これを仕込んでおいて

package INCDiff;
use strict;
use Apache::Constants qw(OK);
use vars qw(%init_module);

my $FILE = '/tmp/inc-diff-modules';

sub init { 
    $init_module{$_}++ for keys %INC; 
}

sub handler {
    my @required = grep { !$init_module{$_} } keys %INC;

    my @modules = ();
    for( @required ) {
        if( $_ =~ /.pm$/ ) {
            $_ =~ s/\//::/g;
            $_ =~ s/.pm$//;
            push @modules , $_;
        }
    }

    open( FH , ">> $FILE" ) ;
    print FH "\n";
    print FH join "\n", @modules;
    close( FH );
    return OK;
}

1;

お茶をしたり、ゲームしたり時間を費やしてアクセスされまくるのを待つ。


で、ファイルできたら、これ実行して、リスト作る

#!/usr/bin/perl

use warnings;
use strict;
use Data::Dumper;
my $FILE = '/tmp/inc-diff-modules';

open ( FH , $FILE );

my %module = ();
while(<FH>) {
    chomp $_;
    next unless $_;
    $module{$_} = 1;

}
close( FH );


foreach my $module ( sort keys %module ) {
    print 'use ' . $module . " ();\n";
}

ついでに

startup.plを鍛えるのは二つの意味でとても有効

  • 共有メモリが増える
  • サーバーの増設をおこなう際に、モジュールのインストール忘れを簡単に見つけることができる。