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

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よりご応募ください。


【中途採用】
フロントエンドエンジニア
サーバーサイドエンジニア
コーポレートエンジニア
SREエンジニア

【新卒採用・その他】
21・22新卒
その他採用情報

関連記事

事業の多角化を支えたランサーズ的SRE術
事業の多角化を支えたランサーズ的SRE術 | TECH PLAY 勉強会

こんにちは、ランサーズでSREチームのエンジニア(内定者インターン)をしているIZUMIRUです。 今回は、2018年2月20日(火) 19:30-21:45に、TECH PLAY SHIBUYAで開催された ランサーズ株式会社主催の勉強会である『事業の多角化 …

thumbnail
企画/開発の境目を取り除こうとしていたら プロジェクトにおける6つの問い をつくっていた話

ランサーズCTOの横井です。 元々ランサーズではプロダクト開発部というところの部長もやっていたのですが、10月の組織変更で改めてプロダクト企画部長も兼任となりました。これまで以上に統合的にプロダクトづくりに取り組んでいけるんじゃないかなーと思っております。 … …

究極のPDCA!その名も「PD鮨A」でプロダクト開発を超速化!

ランサーズのtsuyoshiです。 今回も社内コミュニケーションを活性化させ、プロダクトをよりよくするような【ネタ】です。 サービスやプロダクト開発のPDCAにおいて、日々カイゼン要望を吸収し、高速なPDCAを回すことが必要不可欠です。 ですが、よくよく考える …