1#!/usr/bin/env bash 2 3cd $(dirname $0)/.. 4app_root=$(pwd) 5sidekiq_workers=${SIDEKIQ_WORKERS:-1} 6sidekiq_queues=${SIDEKIQ_QUEUES:-*} # Queues to listen to; default to `*` (all) 7sidekiq_pidfile="$app_root/tmp/pids/sidekiq-cluster.pid" 8sidekiq_logfile="$app_root/log/sidekiq.log" 9gitlab_user=$(ls -l config.ru | awk '{print $3}') 10 11trap cleanup EXIT 12 13warn() 14{ 15 echo "$@" 1>&2 16} 17 18get_sidekiq_pid() 19{ 20 if [ ! -f $sidekiq_pidfile ]; then 21 warn "No pidfile found at $sidekiq_pidfile; is Sidekiq running?" 22 return 23 fi 24 25 cat $sidekiq_pidfile 26} 27 28stop() 29{ 30 sidekiq_pid=$(get_sidekiq_pid) 31 32 if [ $sidekiq_pid ]; then 33 kill -TERM $sidekiq_pid 34 fi 35} 36 37restart() 38{ 39 if [ -f $sidekiq_pidfile ]; then 40 stop 41 fi 42 43 start_sidekiq "$@" 44} 45 46start_sidekiq() 47{ 48 cmd="exec" 49 chpst=$(command -v chpst) 50 51 if [ -n "$chpst" ]; then 52 cmd="${cmd} ${chpst} -P" 53 fi 54 55 # sidekiq-cluster expects an argument per process. 56 for (( i=1; i<=$sidekiq_workers; i++ )) 57 do 58 processes_args+=("${sidekiq_queues}") 59 done 60 61 ${cmd} bin/sidekiq-cluster "${processes_args[@]}" -P $sidekiq_pidfile -e $RAILS_ENV "$@" 2>&1 | tee -a $sidekiq_logfile 62} 63 64cleanup() 65{ 66 stop 67} 68 69action="$1" 70shift 71 72case "$action" in 73 stop) 74 stop 75 ;; 76 start) 77 restart "$@" & 78 ;; 79 start_foreground) 80 start_sidekiq "$@" 81 ;; 82 restart) 83 restart "$@" & 84 ;; 85 *) 86 echo "Usage: RAILS_ENV=<env> SIDEKIQ_WORKERS=<n> $0 {stop|start|start_foreground|restart}" 87esac 88