-
-
Save ssaunier/44bbebb9c0fa01953860 to your computer and use it in GitHub Desktop.
# 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 | |
cd $EB_APP_DEPLOY_DIR | |
if [ -f $SIDEKIQ_PID ] | |
then | |
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 | |
. /opt/elasticbeanstalk/support/envvars.d/sysenv | |
sleep 10 | |
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_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 | |
if [ -f $SIDEKIQ_PID ] | |
then | |
su -s /bin/bash -c "kill -USR1 `cat $SIDEKIQ_PID`" $EB_APP_USER | |
fi |
can confirm this works out of the box, no modifications necessary for a default sidekiq installation.
64bit Amazon Linux 2016.09 v2.3.0 running Ruby 2.3 (Passenger Standalone)
& sidekiq (4.2.2)
Thank you for this wonderful gist, it helped me a lot but it's not perfect.
While using this script as it is it can make some trouble because it's not waiting for the already busy jobs to finish, therefore not killing the sidekiq process "gracefully".
I would suggest using the gist I've made:
https://gist.github.com/MaxDBN/b80d6e5fac7f1a05f2727474ff172ea6
Confirmed working on Passenger with Ruby 2.3 running on 64bit Amazon Linux/2.7.1
on 02/22/18
This script is working well for me. Some minor modifications for sidekiq 5.0 here
is this meant to be run in a web or a worker environment?
Same question as @waissbluth. is this meant to be run in a web or a worker environment?
@waissbluth @mst209 I'm assuming a web server environment because Sidekiq polls Redis, whereas worker environments poll SQS and then makes HTTP requests to itself on localhost:80
.
Can confirm that this file worked for me without modification. FWIW, I'm running mine in a web environment.
It is working on Sidekiq 5.2.7 but not working on Sidekiq 6
/var/log/eb-activity.log (Sidekiq 5.2.7)
WARNING: PID file creation will be removed in Sidekiq 6.0, see #4045. Please use a proper process supervisor to start and manage your services
WARNING: Logfile redirection will be removed in Sidekiq 6.0, see #4045. Sidekiq will only log to STDOUT
WARNING: Daemonization mode will be removed in Sidekiq 6.0, see #4045. Please use a proper process supervisor to start and manage your services
On platform, "Ruby 2.7 running on 64bit Amazon Linux 2", initctl
command from upstart
does not work. Seems we need to use systemctl
to manage the processes.
These scripts won't work for Sidekiq >6. Does any one come by chance with updated scripts?
It seems the new solution for Amazon Linux 2 is to use a Procfile
to manage Sidekiq.
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ruby-platform-procfile.html
https://github.com/mperham/sidekiq/wiki/Heroku
If you don't want to use a Procfile
then I think the Sidekiq project also provided an example of how to perform the setup using systemd
https://github.com/mperham/sidekiq/blob/main/examples/systemd/sidekiq.service
this gist was not working in elastic beanstalk for sidekiq.
It seems the new solution for Amazon Linux 2 is to use a
Procfile
to manage Sidekiq.https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ruby-platform-procfile.html https://github.com/mperham/sidekiq/wiki/Heroku
If you don't want to use a
Procfile
then I think the Sidekiq project also provided an example of how to perform the setup usingsystemd
https://github.com/mperham/sidekiq/blob/main/examples/systemd/sidekiq.service
Amazon Linux 2 and don't support the Procfile feature.
We can't use Procfile.
Did you use systemd
for sidekiq?
@ssaunier Thanks for update.
And I comment for someone who want to how to setup sidekiq on EB.
i found solution with predeploy
, postdeploy
sidekiq/sidekiq#4307 (comment)
https://www.barot.us/running-sidekiq-on-amazon-linux-2/
Work perfectly. Thanks.