のらりくらり

物理化学分野のポスドクです。プログラミング、読書、自転車などが好きです。

Vagrantの上のubuntuでサービスを起動する時

Ubuntuだと最近はupstartっていうイベント駆動型の仕組みを使ってデーモンなりサービスなりを起動するらしい。

で、vagrant上の仮想ubuntuマシンでupstartスクリプトを書いていたのだけど、実行用のスクリプト

/vagrant
においていて、それを

xxx.conf

start on runlevel[2345]
stop on runlevel[!2345]
respawn
script
    exec /vagrant/my_launch.sh
end script

みたいにしているとどうもup時やreload時にサービスが起動しない。

確かめてみると、これはrunlevel[2345]になるタイミングと/vagrant仮想マシン上にマウントされるタイミングが異なるためで、execしようにもそのときにはまだ/vagrant仮想マシン上から見えないためらしい。

解決策としては、上2行を

start on vagrant-mounted
stop on runlevel [!2345]

に変えてやればきちんと/vagrantが共有ディレクトリとしてマウントされた後で走るようになる。