suitepro/plugins/redmine_git_hosting/contrib/scripts/sidekiq_git_hosting.sh

169 lines
3.1 KiB
Bash

#!/bin/bash
# You should place this script in user's home bin dir like :
# /home/redmine/bin/sidekiq_git_hosting.sh
#
# Normally the user's bin directory should be in the PATH.
# If not, add this in /home/redmine/.profile :
#
# ------------------>8
# #set PATH so it includes user's private bin if it exists
# if [ -d "$HOME/bin" ] ; then
# PATH="$HOME/bin:$PATH"
# fi
# ------------------>8
#
#
# This script *must* be run by the Redmine user so
# switch user *before* running the script :
# root$ su - redmine
#
# Then :
# redmine$ sidekiq_git_hosting.sh start
# redmine$ sidekiq_git_hosting.sh stop
# redmine$ sidekiq_git_hosting.sh restart
# WORKER_NAME is used to identify the worker among the processus list
# Example : sidekiq 3.2.1 redmine_git_hosting [0 of 1 busy]
WORKER_NAME="redmine_git_hosting"
# The Rails environment, default : production
RAILS_ENV=${RAILS_ENV:-production}
# The absolute path to Redmine
REDMINE_PATH=${REDMINE_PATH:-$HOME/redmine}
# The start detection timeout
TIMEOUT=${TIMEOUT:-15}
DESC="Sidekiq worker '$WORKER_NAME'"
LOG_DIR="$REDMINE_PATH/log"
PID_DIR="$REDMINE_PATH/tmp/pids"
LOG_FILE="$LOG_DIR/worker_${WORKER_NAME}.log"
PID_FILE="$PID_DIR/worker_${WORKER_NAME}.pid"
# Do not change these values !
# See here for more details :
# https://github.com/jbox-web/redmine_git_hosting/wiki/Configuration-notes#sidekiq--concurrency
CONCURRENCY=1
QUEUE="redmine_git_hosting,1"
if [ "$RAILS_ENV" = "production" ] ; then
DAEMON_OPTS="--daemon --logfile $LOG_FILE --pidfile $PID_FILE"
else
DAEMON_OPTS=
fi
if [ ! -d $PID_DIR ] ; then
mkdir $PID_DIR
fi
RETVAL=0
################################
success() {
echo -e "\t\t[ \e[32mOK\e[0m ]"
}
failure() {
echo -e "\t\t[ \e[31mFailure\e[0m ]"
}
start () {
pid=$(get_pid)
if [ $pid -gt 1 ] ; then
echo "$DESC is already running (pid $pid)"
RETVAL=1
return $RETVAL
fi
echo -n "Starting $DESC ..."
sidekiq $DAEMON_OPTS --verbose --concurrency $CONCURRENCY \
--environment $RAILS_ENV --require $REDMINE_PATH \
--queue $QUEUE --tag $WORKER_NAME
if [ ! -z "$DAEMON_OPTS" ] ; then
for ((i=1; i<=TIMEOUT; i++)) ; do
pid=$(get_pid)
if [ $pid -gt 1 ] ; then
break
fi
echo -n '.' && sleep 1
done
echo -n " "
pid=$(get_pid)
if [ $pid -gt 1 ] ; then
success
RETVAL=0
else
failure
RETVAL=1
fi
fi
}
stop () {
echo -n "Shutting down $DESC ..."
kill $(cat $PID_FILE 2>/dev/null) >/dev/null 2>&1
RETVAL=$?
[ $RETVAL -eq 0 ] && success || failure
rm -f $PID_FILE >/dev/null 2>&1
}
status () {
# show status
pid=$(get_pid)
if [ $pid -gt 1 ] ; then
echo "$DESC is running (pid $pid)"
else
echo "$DESC is stopped"
fi
RETVAL=0
}
get_pid () {
# get status
pid=$(ps axo pid,command | grep sidekiq | grep $WORKER_NAME | awk '{print $1}')
if [ -z $pid ] ; then
rc=1
else
rc=$pid
fi
echo $rc
}
################################
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 1
start
;;
status)
status
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
exit $RETVAL