diff options
Diffstat (limited to 'bin/background_jobs')
-rwxr-xr-x | bin/background_jobs | 83 |
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 |