ランサーズ等のサービスを開発・運用する中で得た知識やノウハウを紹介しています。

thumbnail

Labels:  DevOps 投稿者:ota

Amazon Linux再起動時にUnicornを自動的に起動させる方法

ランサーズ Advent Calendar 2017の20日目を担当します、ota@purratto)です。
今回はAmazon Linux再起動時にUnicornを自動的に起動させる方法を解説します。

実装方法

Unicornを自動的に起動させたいサーバ内に /etc/init.d/unicorn を作成し、下記のように編集します。

#!/bin/sh

#chkconfig:2345 84 16
#description:unicorn shell

. /etc/rc.d/init.d/functions

NAME="Unicorn"
ENV="hoge_env"
ROOT_DIR="/var/www/hoge_dir/current/"
PID_FILE="/var/www/hoge_dir/shared/tmp/pids/unicorn.pid"
PS_PID=$(ps -aef | grep master | grep unicorn | awk '{print $2}')
CONF="${ROOT_DIR}config/unicorn/${ENV}.rb"

start()
{
  PS_PID=$(ps -aef | grep master | grep unicorn | awk '{print $2}')
  if [[ ! -z ${PS_PID} ]] ; then
    echo "${NAME} already started"
    exit 0
  fi
  echo -n "start ${NAME} : "
  daemon $(su -l hoge_user -c "(cd ${ROOT_DIR} && RAILS_ENV=${ENV} /usr/local/rbenv/shims/bundle exec unicorn -c ${CONF} -E ${ENV} -D )")
  echo
}

stop()
{
  if [[ -z ${PS_PID} ]]; then
    echo "${NAME} not started"
    exit 1
  fi

  echo -n "stop ${NAME} : "
  daemon $(kill ${PS_PID})
  echo
  rm -f ${PID_FILE}

  while :
  do
    PS_PID=$(ps -aef | grep master | grep unicorn | awk '{print $2}')
    if [[ -z "${PS_PID}" ]]; then
      break
    fi
    usleep 100000
  done
}

status()
{
  if [[ -z ${PS_PID} ]]; then
    echo "${NAME} is stop"
  else
    echo "${NAME} is running"
  fi
}

restart()
{
  if [[ -z ${PS_PID} ]]; then
    echo "${NAME} not started"
  else
    echo -n "stop ${NAME} : "
    daemon $(kill ${PS_PID})
    echo
    rm -f ${PID_FILE}

    while :
    do
      PS_PID=$(ps -aef | grep master | grep unicorn | awk '{print $2}')
      if [[ -z ${PS_PID} ]]; then
        break
      fi
      usleep 100000
    done
  fi

  start
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    restart
    ;;
  status)
    status
    ;;
  *)
    echo "Syntax Error: release [start|stop|restart|status]"
    ;;
esac

下記のコマンドを実行します。

$ chkconfig –add unicorn
$ chkconfig unicorn on
$ chmod 755 /etc/init.d/unicorn

以上です。参考になれば幸いです。

ランサーズではサービスを成長させてくれるエンジニア、デザイナーを募集しています!
ご興味がある方は、以下URLよりご応募ください。


【中途採用】
サービスリードエンジニア
テックリード(アーキテクト)
フロントエンドエンジニア
サーバーサイドエンジニア
業務エンジニア(社内システム基盤・基幹システム)

【インターン・学生バイト】
19新卒対象サマーインターン
エンジニアインターン

その他採用情報

関連記事

tmux screen capture
複数ターミナルを操作するときの決定版!tmuxの使い方

ランサーズのエンジニアのtomohiroです。 自分が普段使っているツールのひとつ、tmuxを紹介します。特に新しくはないですが、他の人の使い方も気になるんじゃないかなと思ったので、書いてみます。 tmux(terminal multiplexer)とは 1つ …

【告知】BASE×Re:Build×Lancersエンジニアイベント

こんにちは! ここ最近の猛暑で洗濯機が壊れたエンジニア広報の宮田です。 本日は、そんな猛暑も吹き飛ばすイベント情報をお伝えいたします! そのイベントとは・・・ レガシーコード改革! UT/CIでWebサービスの技術的負債を解消する取り組み 日時:8月7日(火) …

gyazo_logo
[Gyazo] 今更聞けない?簡単画像共有アプリ Gyazo のプライベート環境構築方法

こんにちわ!ランサーズのsatoshiです。 今回は、ランサーズの開発メンバーがスクリーンショットの共有に利用している Gyazo という技術についてご紹介したいと思います。 Gyazo とは? Gyazo とはもともと、「スクリーンショットの瞬間共有」という …