Hatena::ブログ(Diary)

(ひ)メモ このページをアンテナに追加 RSSフィード

2013-05-29 (Wed)

死んでもプロセスを上げ直さないdaemontoolsのrunファイル

追記 2013-05-30

これで超簡単にできました!!スバラシす!!!!


daemontoolsdaemonプロセスの管理をしたいのだけど、

  • daemonプロセスが死んだら起動し直したくない
  • svc -t, -d, -k したときはdaemonプロセスを殺して起動し直したくない

という要件が深淵な理由によりある場合のrunファイルはこういう風にすればいいんじゃないかなというお話です。

  • downファイルはsuperviseが起動するとき(/service/下にsymlinkが作られたとき)のみ有効なので、今回の要件には使えない
  • /etc/init/hoged.conf 作って service コマンドで起動しろ、ってのは確かにおっしゃる通りなんですが、できればdaemontoolsで管理したい気持ち

いい方法があったら教えてください!!

2013-05-22 (Wed)

unix domain socketでファイル記述子をやりとりするソケットプーリングを書いてみた

unix domain socket経由でプロセス間でファイル記述子のやりとりができるので、コネクションをプーリングして、unix domain socket経由で別プロセスに貸し出すスクリプトを試しに書いてみました。

poold.pl は起動すると 127.0.0.1:11211 へのコネクションを 3 つ作って保持し、unix domain socketをlistenしてクライアントからの貸し出し要求を待ちます。

ちなみに、unix domain socket は名前付きのではなく、abstract namespace のを作っています。これの利点は、パスに依存しないので、chroot内のプロセスと外のプロセスがやりとりできる点です。

client.pl は起動すると、unix domain socket 経由でソケットを獲得して、使い終わったらまたunix domain socket経由でプーリングプロセスに返却します。

  • 利点
    • ファイル記述子を貸し出してあとの通信には関与しないので、通信量が多いほど、proxy型のプーリング機構より早いと思います。ロードバランサに例えるなら、L7のproxy型とL4のDSRの違いのようなものです。
  • 難点
    • ステートを持ったコネクションをプーリングするのは難しいでしょう。たとえばMySQL(DBD::mysql)とか。注意を払って使えば、memcachedやRedis相手ならいいかもしれません。
    • プロセス間でやりとりできるのはファイル記述子であって、Cache::Memcached::FastやDBIインスタンスではないので、使う側はファイル記述子からドライバのインスタンスを作らないと、実用は困難。でも既存のドライバにはそのような機能(ファイル記述子からインスタンスを作る/インスタンスからファイル記述子を得る)がないものが多い。

2013-05-09 (Thu)

How to prevent premature hsplit issue for EOL Perls

Dear EOL Perl (5.8, 5.10, 5.12) users,


Devel::PatchPerl 0.86 was released yesterday.

Now Devel::PatchPerl applies patch to fix CVE-2013-1667 against EOL Perls (5.8.8, 5.8.9, 5.10.1, 5.12.5).

I suppose we will be able to get fatpacked patchperl based Devel::PatchPerl 0.86 soon.

Before that, perlbrew users can apply same patch using my Devel::PatchPerl::Plugin::Legacy.

$ cpanm Devel::PatchPerl::Plugin::Legacy

$ env PERL5_PATCHPERL_PLUGIN=Devel::PatchPerl::Plugin::Legacy \
  perlbrew install 5.8.8 -Doptimize='-O2 -g'

FYI: Only for 5.8.8, Devel::PatchPerl::Plugin::Legacy also apply patch to enable debug symbol without internal debugging code (-DDEBUGGING) when specify "-g" in -Doptimize. (We can do same with "-DDEBUGGING=-g" on Perl 5.8.9 or later)


Best regards,

hirose31 the EOL Perl user by unfathomable reasons

2013-05-01 (Wed)

p

use Data::Dumper;
$Data::Dumper::Indent   = 1;
$Data::Dumper::Deepcopy = 1;
$Data::Dumper::Sortkeys = 1;
$Data::Dumper::Terse    = 1;

sub p(@) {
    my $d =  Dumper(\@_);
    $d    =~ s/\\x{([0-9a-z]+)}/chr(hex($1))/ge;
    print $d;
}
my %very_complex_data = ( msg => 'give me a beer' );
p \%very_complex_data
↓
[
  {
    'msg' => 'give me a beer'
  }
]
2003 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 05 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 12 |
2012 | 01 | 02 | 03 | 06 | 08 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 |
2015 | 01 | 02 | 07 | 10 |
2016 | 01 | 05 | 10 | 12 |
2017 | 07 |
2018 | 05 |