summaryrefslogtreecommitdiff
path: root/bin/background_jobs
diff options
context:
space:
mode:
Diffstat (limited to 'bin/background_jobs')
-rwxr-xr-xbin/background_jobs83
1 files changed, 77 insertions, 6 deletions
diff --git a/bin/background_jobs b/bin/background_jobs
index cbc501094c4..6aebc8126c6 100755
--- a/bin/background_jobs
+++ b/bin/background_jobs
@@ -1,9 +1,80 @@
#!/usr/bin/env bash
-cd $(dirname $0)/.. || exit 1
+cd $(dirname $0)/..
+app_root=$(pwd)
+sidekiq_workers=${SIDEKIQ_WORKERS:-1}
+sidekiq_pidfile="$app_root/tmp/pids/sidekiq-cluster.pid"
+sidekiq_logfile="$app_root/log/sidekiq.log"
+gitlab_user=$(ls -l config.ru | awk '{print $3}')
-if [ -n "$SIDEKIQ_WORKERS" ] ; then
- exec bin/background_jobs_sk_cluster "$@"
-else
- exec bin/background_jobs_sk "$@"
-fi
+warn()
+{
+ echo "$@" 1>&2
+}
+
+get_sidekiq_pid()
+{
+ if [ ! -f $sidekiq_pidfile ]; then
+ warn "No pidfile found at $sidekiq_pidfile; is Sidekiq running?"
+ return
+ fi
+
+ cat $sidekiq_pidfile
+}
+
+stop()
+{
+ sidekiq_pid=$(get_sidekiq_pid)
+
+ if [ $sidekiq_pid ]; then
+ kill -TERM $sidekiq_pid
+ fi
+}
+
+restart()
+{
+ if [ -f $sidekiq_pidfile ]; then
+ stop
+ fi
+
+ warn "Sidekiq output will be written to $sidekiq_logfile"
+ start_sidekiq "$@" >> $sidekiq_logfile 2>&1
+}
+
+start_sidekiq()
+{
+ cmd="exec"
+ chpst=$(command -v chpst)
+
+ if [ -n "$chpst" ]; then
+ cmd="${cmd} ${chpst} -P"
+ fi
+
+ # sidekiq-cluster expects '*' '*' arguments (one wildcard for each process).
+ for (( i=1; i<=$sidekiq_workers; i++ ))
+ do
+ processes_args+=("*")
+ done
+
+ ${cmd} bin/sidekiq-cluster "${processes_args[@]}" -P $sidekiq_pidfile -e $RAILS_ENV "$@"
+}
+
+action="$1"
+shift
+
+case "$action" in
+ stop)
+ stop
+ ;;
+ start)
+ restart "$@" &
+ ;;
+ start_foreground)
+ start_sidekiq "$@"
+ ;;
+ restart)
+ restart "$@" &
+ ;;
+ *)
+ echo "Usage: RAILS_ENV=<env> SIDEKIQ_WORKERS=<n> $0 {stop|start|start_foreground|restart}"
+esac