鈍足ランナーのIT日記

走るのが好きな5流のITエンジニアのブログ。

趣味の範囲は広いけど、どれも中途半端なクソブロガー楽しめるWebアプリを作ってあっと言わせたい。サーバーサイドPerl(Mojolicious)、クライアントサイドVue.js。Arduinoにも触手を伸ばす予定。

Mojoliciousのstartupの呼び出される回数は?

startupの呼ばれる回数を調べてみた。

package Chat::Web;
use Mojo::Base 'Mojolicious';

# This method will run once at server start
sub startup {
  my $self = shift;

  # Router
  my $r = $self->routes;

  my $config = $self->plugin( 'Config', { file => 'chat.conf' } );
  
  $self->log->info("startup $$");

  # Normal route to controller
  $r->websocket ('/echo')->to('chat#echo');
  $r->get ('/')->to('chat#index');

}

1;

chat.conf

{
  hypnotoad => {
    listen  => ['http://*:8012'],
    workers => 3
  }
};
$hyponotod  ./script/chat_web

$ ps -ef
     UID     PID    PPID  TTY        STIME COMMAND
 d410302    5380    4128 ?        02:32:25 /usr/bin/perl
 d410302    4128       1 ?        02:32:24 /usr/bin/perl
 d410302    7888    7612 pty0     00:37:25 /usr/bin/bash
 d410302    3868    4128 ?        02:32:25 /usr/bin/perl
 d410302    3044    7888 pty0     02:33:44 /usr/bin/ps
 d410302    6696    4128 ?        02:32:25 /usr/bin/perl
 d410302    7612       1 ?        00:37:24 /usr/bin/mintty

ログはこんな感じ

[Sun Jun 22 02:32:24 2014] [info] startup 6404
[Sun Jun 22 02:32:24 2014] [info] Creating process id file "/home/d410302/chat_web/script/hypnotoad.pid".
[Sun Jun 22 02:32:24 2014] [info] Starting zero downtime software upgrade.
[Sun Jun 22 02:32:25 2014] [info] startup 4128
[Sun Jun 22 02:32:25 2014] [info] Listening at "http://*:8012".
[Sun Jun 22 02:32:25 2014] [info] Manager 4128 started.
[Sun Jun 22 02:32:25 2014] [info] Upgrade successful, stopping 4220.
[Sun Jun 22 02:32:26 2014] [info] Creating process id file "/home/d410302/chat_web/script/hypnotoad.pid".
[Sun Jun 22 02:32:57 2014] [info] Worker 3868 has no heartbeat, restarting.

3回よばれると思いきや、2回でした。ワーカープロセスの親(4128)と、もう一つ 6404も呼ばれています。この6404のプロセスIDはpsで確認できないので なんだろう。なんか気持ちが悪い。

morboに変えたら1回だけの呼び出し。 hyponotodの構成ファイルのワーカー数を1にしても、2回の呼び出しだった。

Hypnotoadのソースを読むと https://github.com/kraih/mojo/blob/master/lib/Mojo/Server/Hypnotoad.pm

なんとなく、構成ファイルの読み込みのために、1回プレ読み込みみないなこと をしているので2回呼び出しになっているっぽい。

1回だけ初期処理を行いたい場合はstart_upの中で $ENV{HYPNOTOAD_REV}を参照して、この値が3以上だと処理するみたいな 感じで、行けそうな気がするけど。。