-
-
Save Morxander/11ca6d3480ab05b02d5695007b367b6c to your computer and use it in GitHub Desktop.
Gracefully restarting Sidekiq on Elasticbeanstalk, only after it's done with the running jobs. Tested on: 64bit Amazon Linux 2016.09 v2.3.0 running Ruby 2.3 (Puma). Thanks to ssaunier for the original gist! https://gist.github.com/MaxDBN/b80d6e5fac7f1a05f2727474ff172ea6
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Sidekiq interaction and startup script | |
commands: | |
create_post_dir: | |
command: "mkdir -p /opt/elasticbeanstalk/hooks/appdeploy/post" | |
ignoreErrors: true | |
files: | |
"/opt/elasticbeanstalk/hooks/appdeploy/post/50_restart_sidekiq.sh": | |
mode: "000755" | |
owner: root | |
group: root | |
content: | | |
#!/usr/bin/env bash | |
. /opt/elasticbeanstalk/support/envvars | |
EB_APP_DEPLOY_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_deploy_dir) | |
EB_APP_PID_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_pid_dir) | |
EB_APP_USER=$(/opt/elasticbeanstalk/bin/get-config container -k app_user) | |
EB_SCRIPT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k script_dir) | |
EB_SUPPORT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k support_dir) | |
. $EB_SUPPORT_DIR/envvars | |
. $EB_SCRIPT_DIR/use-app-ruby.sh | |
SIDEKIQ_PID=$EB_APP_PID_DIR/sidekiq.pid | |
SIDEKIQ_CONFIG=$EB_APP_DEPLOY_DIR/config/sidekiq.yml | |
SIDEKIQ_LOG=$EB_APP_DEPLOY_DIR/log/sidekiq.log | |
. /opt/elasticbeanstalk/support/envvars.d/sysenv | |
sleep 10 | |
cd $EB_APP_DEPLOY_DIR | |
echo "starting sidekiq" | |
su -s /bin/bash -c "bundle exec sidekiq \ | |
-e $RACK_ENV \ | |
-P $SIDEKIQ_PID \ | |
-C $SIDEKIQ_CONFIG \ | |
-L $SIDEKIQ_LOG \ | |
-d" $EB_APP_USER | |
"/opt/elasticbeanstalk/hooks/appdeploy/pre/03_mute_sidekiq.sh": | |
mode: "000755" | |
owner: root | |
group: root | |
content: | | |
#!/usr/bin/env bash | |
. /opt/elasticbeanstalk/support/envvars | |
EB_APP_DEPLOY_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_deploy_dir) | |
EB_APP_PID_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_pid_dir) | |
EB_APP_USER=$(/opt/elasticbeanstalk/bin/get-config container -k app_user) | |
EB_SCRIPT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k script_dir) | |
EB_SUPPORT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k support_dir) | |
. $EB_SUPPORT_DIR/envvars | |
. $EB_SCRIPT_DIR/use-app-ruby.sh | |
SIDEKIQ_PID=$EB_APP_PID_DIR/sidekiq.pid | |
cd $EB_APP_DEPLOY_DIR | |
if [ -f $SIDEKIQ_PID ] | |
then | |
echo "waiting for sidekiq to finish busy jobs" | |
su -s /bin/bash -c "bundle exec rake sidekiq:wait" $EB_APP_USER | |
echo "shutting down sidekiq" | |
su -s /bin/bash -c "kill -TERM `cat $SIDEKIQ_PID`" $EB_APP_USER | |
su -s /bin/bash -c "rm -rf $SIDEKIQ_PID" $EB_APP_USER | |
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace :sidekiq do | |
require 'sidekiq/api' | |
desc "Wait until 'busy' queue is finished" | |
task wait: :environment do | |
Sidekiq::ProcessSet.new.each(&:quiet!) | |
while !finished? do sleep(1) end | |
end | |
private | |
def finished? | |
ps = Sidekiq::ProcessSet.new | |
busy_jobs = ps.detect { |process| process['busy'] == 1 } | |
return busy_jobs.blank? | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment