何が嬉しいか
僕がやっている限りですが、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 : : 省略 : :