FreeBSD・OpenBSDと他で ps -e の動作が違ってハマってしまいましたが、Proclet という簡単なsupervisor・プロセス管理モジュールをCPANにあげました。

Proclet - minimalistic Supervisor
https://metacpan.org/module/Proclet

GrowthForecastでは、growthforecast.pl というスクリプトを実行するだけでWebサーバと2つのWorkerが起動します。CloudForecastのように個別に実行が必要になると使うのも面倒ですよね。

growthforecast.pl を実行後、pstreeで見るとこうなってます。growthforecast.plがsupervisor的に動作し、終了したプロセスがあれば自動で起動し直します。

-+= 70330 kazeburo perl growthforecast.pl
 |--- 70332 kazeburo growthforecast.pl (GrowthForecast::Worker 1min) 
 |--- 70333 kazeburo growthforecast.pl (GrowthForecast::Worker) 
 \-+- 70334 kazeburo growthforecast.pl (GrowthForecast::Web) 
   |--- 70335 kazeburo growthforecast.pl (GrowthForecast::Web) 
   |--- 70336 kazeburo growthforecast.pl (GrowthForecast::Web) 
   |--- 70337 kazeburo growthforecast.pl (GrowthForecast::Web) 
   \--- 70338 kazeburo growthforecast.pl (GrowthForecast::Web)

GrowthForecastでこの動作を実現する為に、STFの実装を参考にし(パクリ)つつParallel::PreforkとPrallel::ScoreBoardを利用しています。


Proclet はgrowthforecast.plのようなsupervisorを実現するモジュールで、Parallel::PreforkのHook機構だけを使って実装されています。

use Proclet;

my $proclet = Proclet->new;

$proclet->service(
    code => sub {
        my $worker = MyWorker->new;
        $worker->run;
    },
    worker => 2
);

$proclet->service(
    code => sub {
        my $app = MyWeb->to_psgi;       
        my $loader = Plack::Loader->load(
            'Starlet',
            port => $port,
            host => $host || 0,
            max_workers => 4,
        );
        $loader->run($app);
    },
);

$proclet->run;

service メソッドで動かす物を登録していきます。codeに動かすcoderef、workerに起動するプロセス数を指定します。プロセス数のデフォルトは「1」。最後にrunメソッドを呼ぶと内部でループが回り、プロセス起動・監視します。非常にシンプルですね

GrowthForecastはこっちに切り替える予定です

このブログ記事について

このページは、Masahiro Naganoが2012年6月15日 16:22に書いたブログ記事です。

ひとつ前のブログ記事は「「Mobageを支える技術」を読みました」です。

次のブログ記事は「Monitoring Casual Talk #1 に参加してきた! #monitoringcasual」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 4.27-ja