読者です 読者をやめる 読者になる 読者になる

foremanを使ってUpstart設定ファイルを自動作成する

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
RailsApacheをまとめて起動、
$ sudo stop app
で停止ができる。

foreman exportのよく使うオプションには以下がある。

  • -l, --log   ログディレクトリ場所の指定
  • -u, --user  サービスを起動するユーザ名。指定しないとappというユーザ名になる。
  • -f, --procfile Procfileの場所


ちなみに、foremanにはUpstart以外にも以下のファイルを生成できる。

  • systemd
  • inittab
  • bluepill
  • launchd
  • runit
  • supervisord


foreman exportで生成されたファイルをそのまま使わないとしても、
生成されたファイルはUpstartファイルの書き方の勉強になるだろう。