Created
December 1, 2014 11:57
-
-
Save welingtonsampaio/cf8cdf1e2a49dd4b7e15 to your computer and use it in GitHub Desktop.
puma
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /bin/sh | |
### BEGIN INIT INFO | |
# Provides: puma | |
# Required-Start: $remote_fs $syslog | |
# Required-Stop: $remote_fs $syslog | |
# Default-Start: 2 3 4 5 | |
# Default-Stop: 0 1 6 | |
# Short-Description: Example initscript | |
# Description: This file should be used to construct scripts to be | |
# placed in /etc/init.d. | |
### END INIT INFO | |
# Author: Welington Sampaio <[email protected]> | |
# | |
# Do NOT "set -e" | |
# PATH should only include /usr/* if it runs after the mountnfs.sh script | |
PATH=/usr/local/bin:/usr/local/sbin/:/sbin:/usr/sbin:/bin:/usr/bin | |
DESC="Puma rack web server" | |
NAME=puma | |
DAEMON=$NAME | |
SCRIPTNAME=/etc/init.d/$NAME | |
CONFIG=/etc/puma.conf | |
JUNGLE=`cat $CONFIG` | |
# Load the VERBOSE setting and other rcS variables | |
#. /lib/init/vars.sh | |
# Define CentOS functions. | |
. /etc/init.d/functions | |
do_stop_one() { | |
prefix="RBENV_ROOT=~/.rbenv RBENV_VERSION=$3 RACK_ENV=$4 PATH=/usr/local/bin:$PATH" | |
echo -n $"Stoping APP $2($4): " | |
if [ -f $1/shared/tmp/pids/puma.pid ]; then | |
kill -9 $( cat $1/shared/tmp/pids/puma.pid ) | |
fi | |
echo_success | |
echo '' | |
if [ "$5" != "0" ]; then | |
echo -n $"Stoping Sidekiq $2($4): " | |
runuser $2 -g $2 -s /bin/bash -c "cd $1/current && ( $prefix ~/.rbenv/bin/rbenv exec bundle exec sidekiqctl stop $1/shared/tmp/pids/sidekiq.pid 10 &> /dev/null )" | |
if [ -f $1/shared/tmp/pids/sidekiq.pid ]; then | |
kill -9 $( cat $1/shared/tmp/pids/sidekiq.pid ) | |
fi | |
echo_success | |
echo '' | |
fi | |
} | |
do_stop_line() { | |
deploydir=`echo $1 | cut -d , -f 1` | |
user=`echo $1 | cut -d , -f 2` | |
rbenv_version=`echo $1 | cut -d , -f 3` | |
rack_env=`echo $1 | cut -d , -f 4` | |
has_sidekiq=`echo $1 | cut -d , -f 5` | |
do_stop_one $deploydir $user $rbenv_version $rack_env $has_sidekiq | |
} | |
do_stop() { | |
for i in $JUNGLE; do | |
do_stop_line $i | |
done | |
} | |
do_start_one() { | |
prefix="RBENV_ROOT=~/.rbenv RBENV_VERSION=$3 RACK_ENV=$4 PATH=/usr/local/bin:$PATH" | |
echo -n $"Starting APP $2($4): " | |
# if [ -f $1/shared/tmp/pids/puma.state ]; then | |
# echo "cd $1/current && ( $prefix ~/.rbenv/bin/rbenv exec bundle exec pumactl -S $1/shared/tmp/pids/puma.state restart &> /dev/null )" | |
# runuser $2 -g $2 -s /bin/bash -c "cd $1/current && ( $prefix ~/.rbenv/bin/rbenv exec bundle exec pumactl -S $1/shared/tmp/pids/puma.state restart &> /dev/null )" | |
# else | |
# echo -n " puma " | |
if [ -f $1/shared/tmp/pids/puma.pid ]; then | |
kill -9 $( cat $1/shared/tmp/pids/puma.pid ) &> /dev/null | |
fi | |
runuser $2 -g $2 -s /bin/bash -c "cd $1/current && ( $prefix ~/.rbenv/bin/rbenv exec bundle exec puma -C $1/shared/puma.rb --daemon &> /dev/null )" | |
# fi | |
echo_success | |
echo '' | |
if [ "$5" != "0" ]; then | |
echo -n $"Starting Sidekiq $2($4): " | |
runuser $2 -g $2 -s /bin/bash -c "cd $1/current && ( $prefix ~/.rbenv/bin/rbenv exec bundle exec sidekiq --index 0 --pidfile $1/shared/tmp/pids/sidekiq.pid --environment $4 --logfile $1/shared/log/sidekiq.log --daemon &> /dev/null )" | |
echo_success | |
echo '' | |
fi | |
} | |
do_start_line() { | |
deploydir=`echo $1 | cut -d , -f 1` | |
user=`echo $1 | cut -d , -f 2` | |
rbenv_version=`echo $1 | cut -d , -f 3` | |
rack_env=`echo $1 | cut -d , -f 4` | |
has_sidekiq=`echo $1 | cut -d , -f 5` | |
do_start_one $deploydir $user $rbenv_version $rack_env $has_sidekiq | |
} | |
do_start() { | |
for i in $JUNGLE; do | |
do_start_line $i | |
done | |
} | |
do_status() { | |
if [ -d "$1" ]; then | |
if [ "`grep -c "^$1" $CONFIG`" -eq 0 ]; then | |
echo "O app ja eesta sendo administrado. Remova antes caso precise alterar a configuracao." | |
exit 1 | |
else | |
status -p $1/shared/tmp/pids/puma.pid | |
fi | |
else | |
echo "A pasta de deploy $1 nao existe." | |
exit 1 | |
fi | |
} | |
do_add() { | |
str="" | |
# App's directory | |
if [ -d "$1" ]; then | |
if [ "`grep -c "^$1" $CONFIG`" -eq 0 ]; then | |
str=$1 | |
else | |
echo "O app ja eesta sendo administrado. Remova antes caso precise alterar a configuracao." | |
exit 1 | |
fi | |
else | |
echo "A pasta $1 nao existe." | |
exit 1 | |
fi | |
# User to run it as | |
if [ "`grep -c "^$2:" /etc/passwd`" -eq 0 ]; then | |
echo "O usuario $2 nao existe." | |
exit 1 | |
else | |
str="$str,$2" | |
fi | |
# Versao do ruby no rbenv: 2.1.1 | 1.9.3 | |
if [ "$3" != "" ]; then | |
str="$str,$3" | |
else | |
echo "Deve ser informado a versao do ruby." | |
exit 1 | |
fi | |
# Ambiente de execucao: production | staging | |
if [ "$4" != "" ]; then | |
str="$str,$4" | |
else | |
echo "Deve ser informado o env do ambiente." | |
exit 1 | |
fi | |
# Contem Sidekiq | |
if [ "$4" != "true" ]; then | |
str="$str,1" | |
else | |
str="$str,0" | |
fi | |
# Add it to the jungle | |
echo $str >> $CONFIG | |
echo "Configuracao adicionada: $str. Voce deve executar o start." | |
} | |
do_remove() { | |
if [ "`grep -c "^$1" $CONFIG`" -eq 0 ]; then | |
echo "Esta pasta $1 nao esta disponivel para remover." | |
else | |
# Stop it first. | |
do_stop_line $1 | |
# Remove it from the config. | |
sed -i "\\:^$1:d" $CONFIG | |
echo "App removido da configuracao: $1." | |
fi | |
} | |
case "$1" in | |
stop) | |
if [ "$#" -eq 1 ]; then | |
do_stop | |
else | |
i=`grep $2 $CONFIG` | |
do_stop_line $i | |
fi | |
;; | |
start) | |
if [ "$#" -eq 1 ]; then | |
do_start | |
else | |
i=`grep $2 $CONFIG` | |
do_start_line $i | |
fi | |
;; | |
status) | |
if [ "$#" -lt 2 ]; then | |
echo "Por favor verificar o status de um app deve ser informado a pasta de deploy." | |
echo " Usage: service puma status /path/to/deploy" | |
exit 1 | |
else | |
do_status $2 | |
fi | |
;; | |
add) | |
if [ "$#" -lt 3 ]; then | |
echo "Por favor verifica se foram informados os paramentros corretos." | |
echo " Usage: $SCRIPTNAME add /path/to/deploy user rbenv_version rack_env" | |
echo " config and log are optionals." | |
exit 1 | |
else | |
do_add $2 $3 $4 $5 | |
fi | |
;; | |
remove) | |
if [ "$#" -lt 2 ]; then | |
echo "Por favor, informe o diretorio do deploy." | |
exit 1 | |
else | |
do_remove $2 | |
fi | |
;; | |
*) | |
;; | |
esac | |
: |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment