新しいblogに移行しました

新ブログ "All Yout Bugs Are Belong To Ass" に移行しました!

2011-04-28

[Linux]ユーザ権限でsvscanbootを立ち上げて色々exportする手間を省く

何が嬉しいか

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

0 件のコメント: