何が嬉しいか
僕がやっている限りですが、perlbrew環境でもdaemontoolsのrunファイルで色々exportしなくても意図した通りにアプリケーションが動作してくれる、という点が挙げられます。
設定
例えば$HOME/service/myappとかつくって、PSGI-appをdaemontoolsで常駐させたい場合。
$HOME/.bashrcに1個exportを追記する
以下の行を追記しておく。
export PATH=$HOME/bin:$PATH
書いたら、一旦ログインし直す。
$HOME/以下に必要なディレクトリを用意する
~$ mkdir -p ~/service ~/bin ~/myapp/log
ユーザ用のsvscanbootを作る
$HOME/bin/svscanboot
#!/bin/sh
svscan $HOME/service 2>&1 | \
readproctitle $HOME/service errors: ................................................................................................................................................................................................................................................................................................................................................................................................................
runファイルを作る
$HOME/service/myapp/run
#!/bin/sh
exec 2>&1
start_server --port=6000 -- plackup -L Shotgun -s Starlet ~/psgi/myapp/myapp.psgi
$HOME/service/myapp/log/run
#!/bin/sh
exec 2>&1
exec multilog t ~/myapp/log
サービスをdaemontoolsに登録する
~$ mv ~/myapp ~/service/ -v
svscanbootを起動する
~$ svscanboot &
[1] 13787
プロセス番号(ここでは13787)を控えておき、これをdisownする。
~$ disown 13787
ps axfhでプロセスを見ると、大体こんな感じになってると思います。
~$ ps axfh
:
:
省略
:
:
13787 ? S 0:00 /bin/sh /home/ytnobody/bin/svscanboot
13788 ? S 0:00 \_ svscan /home/ytnobody/service
17896 ? S 0:00 | \_ supervise api
19351 ? S 0:00 | | \_ /bin/sh ./run
19352 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/start_server --port=6000 -- plackup -L Shotgun -s Starl
19353 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/myapp
19354 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my
19355 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my
19356 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my
19357 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my
19358 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my
19359 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my
19360 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my
19361 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my
19362 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my
19363 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my
17897 ? S 0:00 | \_ supervise log
17900 ? S 0:00 | \_ multilog t /home/ytnobody/myapp/log
/home/ytnobody/src/mongodb/data/db --nohttpinterface
:
:
省略
:
: