Skip to content

Instantly share code, notes, and snippets.

@maddiesch
Created April 23, 2017 22:52
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maddiesch/a73540f48cd343263aaae471400c2a43 to your computer and use it in GitHub Desktop.
Save maddiesch/a73540f48cd343263aaae471400c2a43 to your computer and use it in GitHub Desktop.
Systemd Sidekiq Capistrano

Systemd managed Sidekiq

This assumes that sidekiq.service is located in <rails root>/lib/services/sidekiq.service

# Put in lib/capistrano/tasks/sidekiq.rake
namespace :sidekiq do
after 'deploy:starting', 'sidekiq:quiet'
after 'deploy:updating', 'sidekiq:update'
after 'deploy:updated', 'sidekiq:stop'
after 'deploy:reverted', 'sidekiq:stop'
after 'deploy:published', 'sidekiq:start'
desc 'Update sidekiq service'
task :update do
on roles(:worker) do
file_path = "#{release_path}/lib/services/sidekiq.service"
service = '/lib/systemd/system/sidekiq.service'
config_exists = test("[ -f #{service} ]")
if config_exists && test("diff #{service} #{file_path}")
# no-op
else
if config_exists
execute :sudo, 'systemctl', 'disable', 'sidekiq.service', raise_on_non_zero_exit: false
end
execute :sudo, 'cp', '--remove-destination', file_path, service
execute :sudo, 'systemctl', 'daemon-reload'
execute :sudo, 'systemctl', 'enable', 'sidekiq.service'
end
end
end
desc 'Quiet Sidekiq service'
task :quiet do
on roles(:worker) do
execute :sudo, 'pgrep', '-f', 'sidekiq', '|', 'xargs', 'kill', '-USR1'
end
end
desc 'Start Sidekiq service'
task :start do
on roles(:worker) do
execute :sudo, 'systemctl', 'start', 'sidekiq.service'
end
end
desc 'Stop Sidekiq service'
task :stop do
on roles(:worker) do
execute :sudo, 'systemctl', 'stop', 'sidekiq.service'
end
end
end
# Put in lib/services/sidekiq.service
[Unit]
Description=sidekiq
After=syslog.target network.target
[Service]
Type=simple
WorkingDirectory=/mnt/apps/app_name_production/current
ExecStart=/bin/bash -lc 'bundle exec sidekiq -C config/sidekiq.yml -e production'
User=ubuntu
Group=ubuntu
UMask=0002
RestartSec=1
Restart=on-failure
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=sidekiq
[Install]
WantedBy=multi-user.target
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment