Unicorn プロセスを自動起動させる init.d スクリプト用の Chef Recipe

Rails アプリケーションなどを Nginx + Unicorn で動作させる場合、サーバー再起動の際に Nginx とともに Unicorn のプロセスも自動で起動してくれるほうが良いです。ということで、Unicorn プロセス用の init.d 起動スクリプトを設定するための、Chef の Cookbook/Recipe を作成しました。

スポンサーリンク

このエントリーは、CentOS サーバー設定用 Chef Cookbook/Recipe の目次 の一部です。

Unicorn の init.d 起動スクリプト用の Chef Recipe

アプリケーション(プロジェクト)ごとに、init.d 起動スクリプトを作成するために、プロジェクト名は変数(node.set[‘project’][‘name’])にしています。

site-cookbooks/base_cookbook/recipes/unicorn_app.rb

template リソース中で source ファイルを指定しておけば、作成する init.d スクリプトのファイル名を動的に変更できます。このあたりは、Chef を気に入っている便利な点の一つです。

後半は chkconfig コマンドでサービスに追加して、デフォルトで on になるように設定。service リソースを使っても良いかも…です。

Unicorn 用 init.d 起動スクリプトのテンプレート

こちらも、動的に変更させる箇所は変数で指定しました。Unicorn のプロセス名(NAME)やアプリケーションのルートディレクトリ(APP_ROOT_DIR)、環境(ENVIROMENT)、コマンドを実行するユーザー名(USER)などを node.set ハッシュの変数で設定。

site-cookbooks/base_cookbook/templates/default/unicorn_app.erb

当初コマンドの実行に ‘su’ を付加せずに、root ユーザーでコマンドを実行していたら上手く動きませんでした。Unicorn の pid ファイル($APP_ROOT_DIR/tmp/pids/unicorn.pid)の所有者である deploy_user で実行させるように、’su’ で $USER を指定したところ上手く動作しました。あとはプロビジョニング実行。

/etc/init.d/unicorn_app 起動スクリプトの動作確認

起動。

停止。

あと、サーバー再起動後に自動で Unicorn のプロセスが起動するかも確認。

もう一歩進めて、monit で Unicorn のプロセスを死活監視する Chef Recipe も作成しましたので、明日はそれについて書く予定です。もし Unicorn のプロセスが停止していたら、今回作成した Unicorn 用の init.d 起動スクリプトを利用して、monit で自動起動させるようにします。

スポンサーリンク
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)
  • 2件のコメント
  • しろ

    同じようなことをやろうとしていて、とても参考にさせていただいてます。
    ありがとう!

    • taka

      しろさん、こんにちは。こちらこそ記事をお読み頂きありがとうございます!大変嬉しくブログ更新の励みになります^^

Leave Your Message!