Fork me on GitHub

Unicorn init.d script

Mon Jan 21 00:00:00 -0800 2013

#!/bin/bash
#  
# description: Stats service init file
#
# NOTE: for properly execution, the script expects to found unicorn
# executable in $PROJ\_DIR/bin directory
#  
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

## configure your variables here
PID_FILE=/path/to/pidfile.pid
PROJ_DIR=/path/to/project
LOG_FILE=/path/to/log
TAG='[ProjName]'
UNICORN_CONFIG=/path/to/unicorn.rb

OLD_PID_FILE="$PID_FILE.oldbin"

# Start the service
start() { 
  if [[ -f $PID_FILE ]]; then
    echo "There is a PID file in $PID_FILE. Service should be running"
    exit 1
  else
    echo "Starting server: "
    echo "$(date) $TAG Trying to start server..." >> $LOG_FILE
    su - stats -c "bash -c 'cd $PROJ_DIR ; bin/unicorn -c $UNICORN_CONFIG -E production -D'"
    if [[ $? == 0 ]]; then
      echo "$(date) $TAG server started" >> $LOG_FILE
      echo "Ok"
    else
      echo "$(date) $TAG FAILED to start server" >> $LOG_FILE
      echo "Failure"
      exit 1
    fi
  fi
}  

# Stop the service
stop() {
  echo "Stopping server: "
  echo "$(date) $TAG Trying to stop server..." >> $LOG_FILE
  kill -QUIT $(cat $PID_FILE)
  if [[ $? == 0 ]]; then
    echo "$(date) $TAG Server started" >> $LOG_FILE
    echo "Ok"
  else
    echo "$(date) $TAG FAILED to start server" >> $LOG_FILE
    echo "Failure"
    exit 1
  fi
}

# Reload service
reload() {
  echo -n "Reloading server: "
  echo "$(date) $TAG Trying to reload server" >> $LOG_FILE
  kill -USR2 $(cat $PID_FILE)
  sleep 1
  if [[ -f $OLD_PID_FILE ]]; then
    echo "$(date) $TAG Server reloaded" >> $LOG_FILE
    echo "Ok"
    echo "$(date) $TAG Killing old instances..." >> $LOG_FILE
    echo -n "Trying to kill old instances: "
    kill -QUIT $( cat $OLD_PID_FILE )
    echo "$(date) $TAG Old instances killed" >> $LOG_FILE
    echo "Ok"
  else
    echo "$(date) $TAG FAILED to reload server" >> $LOG_FILE
    echo "Failure"
    exit 1
  fi
}
### main logic ###
case "$1" in
start)
  start
  ;;
stop)
  stop
  ;;

restart)
  stop
  sleep 1
  start
  ;;
reload)
  reload
  ;;
*)
  echo $"Usage: $0 {start|stop|restart|reload}"
  exit 1
esac

exit 0