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