Commit 4da50727 authored by Oswaldo Ferreira's avatar Oswaldo Ferreira

Support opt-in sidekiq-cluster in bin/background_jobs script

It simplifies the interface of `bin/background_jobs` as:

1. start - Starting sidekiq or sidekiq-cluster on background.
2. restart - Kill all existing processes and start them
again (in background).
3. start_foreground - Starts sidekiq or sidekiq-cluster on foreground.
4. stop - Well, stops the process.

Here we also split the script into two `bin/background_jobs_sk` and
`bin/background_jobs_sk_cluster`. If `SIDEKIQ_WORKERS` env var is
given we use the `bin/background_jobs_sk_cluster`, which has
basically the same API of the sidekiq counterpart.
parent 09e0f794
#!/bin/sh
cd $(dirname $0)/..
app_root=$(pwd)
sidekiq_pidfile="$app_root/tmp/pids/sidekiq.pid"
sidekiq_logfile="$app_root/log/sidekiq.log"
sidekiq_config="$app_root/config/sidekiq_queues.yml"
gitlab_user=$(ls -l config.ru | awk '{print $3}')
warn()
{
echo "$@" 1>&2
}
stop()
{
bundle exec sidekiqctl stop $sidekiq_pidfile >> $sidekiq_logfile 2>&1
}
killall()
{
pkill -u $gitlab_user -f 'sidekiq [0-9]'
}
restart()
{
if [ -f $sidekiq_pidfile ]; then
stop
fi
killall
start_sidekiq -P $sidekiq_pidfile -d -L $sidekiq_logfile >> $sidekiq_logfile 2>&1
}
start_no_deamonize()
{
start_sidekiq >> $sidekiq_logfile 2>&1
}
start_sidekiq()
{
cmd="exec"
chpst=$(which chpst)
if [ -n "$chpst" ]; then
cmd="${cmd} ${chpst} -P"
fi
${cmd} bundle exec sidekiq -C "${sidekiq_config}" -e $RAILS_ENV "$@"
}
load_ok()
{
sidekiq_pid=$(cat $sidekiq_pidfile)
if [ -z "$sidekiq_pid" ] ; then
warn "Could not find a PID in $sidekiq_pidfile"
exit 0
fi
if (ps -p $sidekiq_pid -o args | grep '\([0-9]\+\) of \1 busy' 1>&2) ; then
warn "Too many busy Sidekiq workers"
exit 1
fi
exit 0
}
case "$1" in
stop)
stop
;;
start)
restart
;;
start_no_deamonize)
start_no_deamonize
;;
start_foreground)
start_sidekiq
;;
restart)
restart
;;
killall)
killall
;;
load_ok)
load_ok
;;
*)
echo "Usage: RAILS_ENV=your_env $0 {stop|start|start_no_deamonize|restart|killall|load_ok}"
esac
if [ -n "$SIDEKIQ_WORKERS" ] ; then
exec bin/background_jobs_sk_cluster "$@"
else
exec bin/background_jobs_sk "$@"
fi
#!/bin/sh
cd $(dirname $0)/..
app_root=$(pwd)
sidekiq_pidfile="$app_root/tmp/pids/sidekiq.pid"
sidekiq_logfile="$app_root/log/sidekiq.log"
sidekiq_config="$app_root/config/sidekiq_queues.yml"
gitlab_user=$(ls -l config.ru | awk '{print $3}')
warn()
{
echo "$@" 1>&2
}
stop()
{
bundle exec sidekiqctl stop $sidekiq_pidfile >> $sidekiq_logfile 2>&1
}
restart()
{
if [ -f $sidekiq_pidfile ]; then
stop
fi
pkill -u $gitlab_user -f 'sidekiq [0-9]'
start_sidekiq -P $sidekiq_pidfile -d -L $sidekiq_logfile >> $sidekiq_logfile 2>&1
}
# Starts on foreground but output to the logfile instead stdout.
start_silent()
{
start_sidekiq >> $sidekiq_logfile 2>&1
}
start_sidekiq()
{
cmd="exec"
chpst=$(which chpst)
if [ -n "$chpst" ]; then
cmd="${cmd} ${chpst} -P"
fi
${cmd} bundle exec sidekiq -C "${sidekiq_config}" -e $RAILS_ENV "$@"
}
case "$1" in
stop)
stop
;;
start)
restart
;;
start_silent)
warn "Deprecated: Will be removed at 13.0 (see https://gitlab.com/gitlab-org/gitlab/-/issues/196731)."
start_silent
;;
start_foreground)
start_sidekiq
;;
restart)
restart
;;
*)
echo "Usage: RAILS_ENV=<env> $0 {stop|start|start_silent|start_foreground|restart}"
esac
#!/bin/sh
cd $(dirname $0)/..
app_root=$(pwd)
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}')
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=$(which 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
}
case "$1" 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
---
title: Support sidekiq-cluster supervision through bin/background_jobs
merge_request: 27042
author:
type: added
......@@ -33,6 +33,6 @@ namespace :sidekiq do
task :launchd do
deprecation_warning!
system(*%w(bin/background_jobs start_no_deamonize))
system(*%w(bin/background_jobs start_silent))
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment