foremanを使っていると、つい、起動するサービスをどんどん追加してしまう。
そこでforemanを使ってUpstart設定ファイルを自動生成して、
サービスをUpstartで起動するようにしてみよう。
まず、以下のようなProcfileがあるとする。
$ cat Procfile apache: /usr/local/apache2/bin/apachectl -DFOREGROUND rails: bundle exec rails s
そしてforeman exportコマンドでUpstart設定ファイルを生成する。
$ foreman export upstart /etc/init -u vagrant [foreman export] writing: app.conf [foreman export] writing: app-apache.conf [foreman export] writing: app-apache-1.conf [foreman export] writing: app-rails.conf [foreman export] writing: app-rails-1.conf
生成されたファイルをみてみる。
$ cat app.conf pre-start script bash << "EOF" mkdir -p /var/log/app chown -R vagrant /var/log/app EOF end script start on runlevel [2345] stop on runlevel [016] $ cat app-apache.conf start on starting app stop on stopping app $ cat app-apache-1.conf start on starting app-apache stop on stopping app-apache respawn exec su - vagrant -c 'cd /home/vagrant/rails; export PORT=5000; /usr/local/apache2/bin/apachectl -DFOREGROUND >> /var/log/app/apache-1.log 2>&1' $ cat app-rails.conf start on starting app stop on stopping app $ cat app-rails-1.conf start on starting app-rails stop on stopping app-rails respawn exec su - vagrant -c 'cd /home/vagrant/rails; export PORT=5100; bundle exec rails s >> /var/log/app/rails-1.log 2>&1'
app-apache.confとapp-rails.confがapp.confに紐付いてる。
そして、app-apache-1.confはapp-apache.conf、app-rails-1.confはapp-rails.confに紐付いている。
なので
$ sudo start app
でRailsとApacheをまとめて起動、
$ sudo stop app
で停止ができる。
foreman exportのよく使うオプションには以下がある。
- -l, --log ログディレクトリ場所の指定
- -u, --user サービスを起動するユーザ名。指定しないとappというユーザ名になる。
- -f, --procfile Procfileの場所
ちなみに、foremanにはUpstart以外にも以下のファイルを生成できる。
- systemd
- inittab
- bluepill
- launchd
- runit
- supervisord
foreman exportで生成されたファイルをそのまま使わないとしても、
生成されたファイルはUpstartファイルの書き方の勉強になるだろう。