capistrano-sidekiq 2.0.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,26 +1,68 @@
1
+ # Source: https://github.com/mperham/sidekiq/blob/master/examples/systemd/sidekiq.service
2
+ #
3
+ # This file tells systemd how to run Sidekiq as a 24/7 long-running daemon.
4
+ #
5
+ # Customize this file based on your bundler location, app directory, etc.
6
+ # Customize and copy this into /usr/lib/systemd/system (CentOS) or /lib/systemd/system (Ubuntu).
7
+ # Then run:
8
+ # - systemctl enable <%= sidekiq_service_unit_name %>
9
+ # - systemctl {start,stop,restart} <%= sidekiq_service_unit_name %>
10
+ #
11
+ # This file corresponds to a single Sidekiq process. Add multiple copies
12
+ # to run multiple processes (sidekiq-1, sidekiq-2, etc).
13
+ #
14
+ # Use `journalctl -u <%= sidekiq_service_unit_name %> -rn 100` to view the last 100 lines of log output.
15
+ #
1
16
  [Unit]
2
17
  Description=sidekiq for <%= "#{fetch(:application)} (#{fetch(:stage)})" %>
18
+ # start us only once the network and logging subsystems are available,
19
+ # consider adding redis-server.service if Redis is local and systemd-managed.
3
20
  After=syslog.target network.target
4
21
 
22
+ # See these pages for lots of options:
23
+ #
24
+ # https://www.freedesktop.org/software/systemd/man/systemd.service.html
25
+ # https://www.freedesktop.org/software/systemd/man/systemd.exec.html
26
+ #
27
+ # THOSE PAGES ARE CRITICAL FOR ANY LINUX DEVOPS WORK; read them multiple
28
+ # times! systemd is a critical tool for all developers to know and understand.
29
+ #
5
30
  [Service]
6
- Type=simple
31
+ #
32
+ # !!!! !!!! !!!!
33
+ #
34
+ # As of v6.0.6, Sidekiq automatically supports systemd's `Type=notify` and watchdog service
35
+ # monitoring. If you are using an earlier version of Sidekiq, change this to `Type=simple`
36
+ # and remove the `WatchdogSec` line.
37
+ #
38
+ # !!!! !!!! !!!!
39
+ #
40
+ Type=notify
41
+ # If your Sidekiq process locks up, systemd's watchdog will restart it within seconds.
42
+ WatchdogSec=10
43
+
7
44
  WorkingDirectory=<%= File.join(fetch(:deploy_to), 'current') %>
8
- ExecStart=<%= SSHKit.config.command_map[:bundle] %> exec sidekiq -e <%= fetch(:sidekiq_env) %>
9
- ExecReload=/bin/kill -TSTP $MAINPID
10
- ExecStop=/bin/kill -TERM $MAINPID
11
- <%="StandardOutput=append:#{fetch(:sidekiq_log)}" if fetch(:sidekiq_log) %>
12
- <%="StandardError=append:#{fetch(:sidekiq_error_log)}" if fetch(:sidekiq_error_log) %>
45
+ ExecStart=<%= expanded_bundle_path %> exec sidekiq -e <%= fetch(:sidekiq_env) %> <%= sidekiq_config %> <%= sidekiq_concurrency %> <%= sidekiq_queues %>
46
+
47
+ # Use `systemctl kill -s TSTP <%= sidekiq_service_unit_name %>` to quiet the Sidekiq process
13
48
  <%="User=#{sidekiq_user}" if sidekiq_user %>
14
- <%="EnvironmentFile=#{fetch(:sidekiq_service_unit_env_file)}" if fetch(:sidekiq_service_unit_env_file) %>
49
+ UMask=0002
50
+
51
+ <%="EnvironmentFile=#{File.join(fetch(:deploy_to), 'current')}/#{fetch(:sidekiq_service_unit_env_file)}" if fetch(:sidekiq_service_unit_env_file) %>
15
52
 
16
53
  <% fetch(:sidekiq_service_unit_env_vars, []).each do |environment_variable| %>
17
54
  <%="Environment=#{environment_variable}" %>
18
55
  <% end %>
19
56
 
57
+ # if we crash, restart
20
58
  RestartSec=1
21
59
  Restart=on-failure
22
60
 
23
- SyslogIdentifier=sidekiq
61
+ # output goes to /var/log/syslog (Ubuntu) or /var/log/messages (CentOS)
62
+ <%="StandardOutput=append:#{fetch(:sidekiq_log)}" if fetch(:sidekiq_log) %>
63
+ <%="StandardError=append:#{fetch(:sidekiq_error_log)}" if fetch(:sidekiq_error_log) %>
64
+
65
+ SyslogIdentifier=<%= sidekiq_service_unit_name %>
24
66
 
25
67
  [Install]
26
68
  WantedBy=default.target
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-sidekiq
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Abdelkader Boudih
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-19 00:00:00.000000000 Z
11
+ date: 2022-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capistrano
@@ -62,7 +62,6 @@ files:
62
62
  - ".gitignore"
63
63
  - ".tool-versions"
64
64
  - CHANGELOG.md
65
- - CONTRIBUTORS.md
66
65
  - Gemfile
67
66
  - LICENSE.txt
68
67
  - README.md
@@ -70,19 +69,16 @@ files:
70
69
  - capistrano-sidekiq.gemspec
71
70
  - lib/capistrano-sidekiq.rb
72
71
  - lib/capistrano/sidekiq.rb
72
+ - lib/capistrano/sidekiq/helpers.rb
73
73
  - lib/capistrano/sidekiq/monit.rb
74
74
  - lib/capistrano/sidekiq/systemd.rb
75
- - lib/capistrano/sidekiq/upstart.rb
76
75
  - lib/capistrano/sidekiq/version.rb
77
76
  - lib/capistrano/tasks/monit.rake
78
77
  - lib/capistrano/tasks/sidekiq.rake
79
78
  - lib/capistrano/tasks/systemd.rake
80
- - lib/capistrano/tasks/upstart.rake
81
79
  - lib/generators/capistrano/sidekiq/monit/template_generator.rb
82
80
  - lib/generators/capistrano/sidekiq/monit/templates/sidekiq_monit.conf.erb
83
81
  - lib/generators/capistrano/sidekiq/systemd/templates/sidekiq.service.capistrano.erb
84
- - lib/generators/capistrano/sidekiq/upstart/templates/sidekiq.conf.erb
85
- - lib/generators/capistrano/sidekiq/upstart/templates/workers.conf.erb
86
82
  homepage: https://github.com/seuros/capistrano-sidekiq
87
83
  licenses:
88
84
  - LGPL-3.0
@@ -102,7 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
98
  - !ruby/object:Gem::Version
103
99
  version: '0'
104
100
  requirements: []
105
- rubygems_version: 3.0.3
101
+ rubygems_version: 3.2.22
106
102
  signing_key:
107
103
  specification_version: 4
108
104
  summary: Sidekiq integration for Capistrano
data/CONTRIBUTORS.md DELETED
@@ -1,11 +0,0 @@
1
- ## Contributors
2
-
3
- - [Jérémy Lecour] (https://github.com/jlecour)
4
- - [Fabien Penso] (https://github.com/penso)
5
- - [Alex Dunae] (https://github.com/alexdunae)
6
- - [andreygerasimchuk] (https://github.com/andreygerasimchuk)
7
- - [Saicheg] (https://github.com/Saicheg)
8
- - [Alex Yakubenko] (https://github.com/alexyakubenko)
9
- - [Robert Strobl] (https://github.com/rstrobl)
10
- - [Eurico Doirado] (https://github.com/okoriko)
11
- - [Huang Bin](https://github.com/hbin)
@@ -1,11 +0,0 @@
1
- module Capistrano
2
- class Sidekiq::Upstart < Capistrano::Plugin
3
- def set_defaults
4
- set_if_empty :sidekiq_service_unit_name, 'sidekiq'
5
- end
6
-
7
- def define_tasks
8
- eval_rakefile File.expand_path('../../tasks/upstart.rake', __FILE__)
9
- end
10
- end
11
- end
@@ -1,146 +0,0 @@
1
- git_plugin = self
2
-
3
- SUPPRESS_FAILURE = %w[|| echo NO_RUNNING_INSTANCE].freeze
4
-
5
- namespace :sidekiq do
6
- desc 'Quiet sidekiq (stop fetching new tasks from Redis)'
7
- task :quiet do
8
- on roles fetch(:sidekiq_roles) do |role|
9
- git_plugin.switch_user(role) do
10
- sudo :service, fetch(:sidekiq_service_unit_name), :reload, *SUPPRESS_FAILURE
11
- end
12
- end
13
- end
14
-
15
- desc 'Stop sidekiq (graceful shutdown within timeout, put unfinished tasks back to Redis)'
16
- task :stop do
17
- on roles fetch(:sidekiq_roles) do |role|
18
- git_plugin.switch_user(role) do
19
- sudo :service, fetch(:sidekiq_service_unit_name), :stop, *SUPPRESS_FAILURE
20
- end
21
- end
22
- end
23
-
24
- desc 'Start sidekiq'
25
- task :start do
26
- on roles fetch(:sidekiq_roles) do |role|
27
- git_plugin.switch_user(role) do
28
- sudo :service, fetch(:sidekiq_service_unit_name), :start
29
- end
30
- end
31
- end
32
-
33
- desc 'Install upstart sidekiq service'
34
- task :install do
35
- on roles fetch(:sidekiq_roles) do |role|
36
- git_plugin.switch_user(role) do
37
- git_plugin.create_upstart_template
38
- end
39
- end
40
- end
41
-
42
- desc 'UnInstall upstart sidekiq service'
43
- task :uninstall do
44
- on roles fetch(:sidekiq_roles) do |role|
45
- git_plugin.switch_user(role) do
46
- execute :rm, '-f', File.join(fetch(:service_unit_path, fetch_upstart_unit_path), fetch(:sidekiq_service_unit_name))
47
- end
48
- end
49
- end
50
-
51
- desc 'Generate service_locally'
52
- task :generate_service_locally do
53
- run_locally do
54
- File.write('sidekiq.conf', git_plugin.compiled_template)
55
- end
56
- end
57
-
58
- def fetch_upstart_unit_path
59
- if fetch(:sidekiq_service_unit_user) == :system
60
- # if the path is not standard `set :service_unit_path`
61
- "/etc/init"
62
- else
63
- home_dir = backend.capture :pwd
64
- File.join(home_dir, '.config', 'upstart')
65
- end
66
- end
67
-
68
- def compiled_template
69
- search_paths = [
70
- File.expand_path(
71
- File.join(*%w[.. .. .. generators capistrano sidekiq upstart templates sidekiq.conf.erb]),
72
- __FILE__
73
- ),
74
- ]
75
- template_path = search_paths.detect { |path| File.file?(path) }
76
- template = File.read(template_path)
77
- ERB.new(template).result(binding)
78
- end
79
-
80
- def create_upstart_template
81
- ctemplate = compiled_template
82
- upstart_path = fetch(:service_unit_path, fetch_upstart_unit_path)
83
-
84
- if fetch(:sidekiq_service_unit_user) != :system
85
- backend.execute :mkdir, "-p", upstart_path
86
- end
87
- conf_filename = "#{fetch :sidekiq_service_unit_name}.conf"
88
- backend.upload!(
89
- StringIO.new(ctemplate),
90
- "/tmp/#{conf_filename}"
91
- )
92
- if fetch(:sidekiq_service_unit_user) == :system
93
- backend.execute :sudo, :mv, "/tmp/#{conf_filename}", "#{upstart_path}/#{conf_filename}"
94
- backend.execute :sudo, :initctl, 'reload-configuration'
95
- else
96
- backend.execute :sudo, :mv, "/tmp/#{conf_filename}", "#{upstart_path}/#{conf_filename}"
97
- #backend.execute :sudo, :initctl, 'reload-configuration' #TODO
98
- end
99
- end
100
-
101
- def switch_user(role)
102
- su_user = sidekiq_user(role)
103
- if su_user == role.user
104
- yield
105
- else
106
- as su_user do
107
- yield
108
- end
109
- end
110
- end
111
-
112
- def sidekiq_user(role = nil)
113
- if role.nil?
114
- fetch(:sidekiq_user)
115
- else
116
- properties = role.properties
117
- properties.fetch(:sidekiq_user) || # local property for sidekiq only
118
- fetch(:sidekiq_user) ||
119
- properties.fetch(:run_as) || # global property across multiple capistrano gems
120
- role.user
121
- end
122
- end
123
-
124
- def num_workers
125
- fetch(:sidekiq_upstart_num_workers, nil)
126
- end
127
-
128
- def sidekiq_config
129
- if fetch(:sidekiq_config)
130
- "--config #{fetch(:sidekiq_config)}"
131
- end
132
- end
133
-
134
- def sidekiq_concurrency
135
- if fetch(:sidekiq_concurrency)
136
- "--concurrency #{fetch(:sidekiq_concurrency)}"
137
- end
138
- end
139
-
140
- def sidekiq_queues
141
- Array(fetch(:sidekiq_queue)).map do |queue|
142
- "--queue #{queue}"
143
- end.join(' ')
144
- end
145
-
146
- end
@@ -1,78 +0,0 @@
1
- # /etc/init/sidekiq.conf - Sidekiq config | https://github.com/mperham/sidekiq/blob/master/examples/upstart/sidekiq.conf
2
-
3
- # This example config should work with Ubuntu 12.04+. It
4
- # allows you to manage multiple Sidekiq instances with
5
- # Upstart, Ubuntu's native service management tool.
6
- #
7
- # See workers.conf for how to manage all Sidekiq instances at once.
8
- #
9
- # Save this config as /etc/init/sidekiq.conf then manage sidekiq with:
10
- # sudo start <%= fetch(:sidekiq_service_unit_name) %> index=0
11
- # sudo stop <%= fetch(:sidekiq_service_unit_name) %> index=0
12
- # sudo status <%= fetch(:sidekiq_service_unit_name) %> index=0
13
- #
14
- # Hack Upstart's reload command to 'quiet' Sidekiq:
15
- #
16
- # sudo reload <%= fetch(:sidekiq_service_unit_name) %> index=0
17
- #
18
- # or use the service command:
19
- # sudo service <%= fetch(:sidekiq_service_unit_name) %> {start,stop,restart,status}
20
- #
21
-
22
- description "Sidekiq for <%= "#{fetch(:application)} (#{fetch(:stage)})" %>"
23
-
24
- # This script is not meant to start on bootup, workers.conf
25
- # will start all sidekiq instances explicitly when it starts.
26
- #start on runlevel [2345]
27
- #stop on runlevel [06]
28
- <% if sidekiq_user %>
29
-
30
- # change to match your deployment user
31
- setuid <%= sidekiq_user %>
32
- setgid <%= sidekiq_user %>
33
- env HOME=/home/<%= sidekiq_user %>
34
- <% end %>
35
-
36
- # Greatly reduce Ruby memory fragmentation and heap usage
37
- # https://www.mikeperham.com/2018/04/25/taming-rails-memory-bloat/
38
- env MALLOC_ARENA_MAX=2
39
-
40
- respawn
41
- respawn limit 3 30
42
-
43
- # TERM is used when stopping sidekiq. Without declaring these as
44
- # normal exit codes, it just respawns.
45
- normal exit 0 TERM
46
-
47
- # Older versions of Upstart might not support the reload command and need
48
- # this commented out.
49
- reload signal TSTP
50
-
51
- # Upstart waits 5 seconds by default to kill a process. Increase timeout to
52
- # give sidekiq process enough time to exit.
53
- kill timeout 30
54
- <% if num_workers %>
55
-
56
- instance $index
57
- <% end %>
58
- script
59
- # this script runs in /bin/sh by default
60
- # respawn as bash so we can source in rbenv
61
- exec /bin/bash <<'EOT'
62
- # Pick your poison :) Or none if you're using a system wide installed Ruby.
63
- # rbenv
64
- # source /home/apps/.bash_profile
65
- # OR
66
- # source /home/apps/.profile
67
- # OR system:
68
- # source /etc/profile.d/rbenv.sh
69
- #
70
- # rvm
71
- # source /home/apps/.rvm/scripts/rvm
72
-
73
- # Logs out to /var/log/upstart/<%= fetch(:sidekiq_service_unit_name) %>.log by default
74
-
75
- cd <%= File.join(fetch(:deploy_to), 'current') %>
76
- exec <%= SSHKit.config.command_map[:bundle] %> exec sidekiq -e <%= fetch(:sidekiq_env) %> <%= sidekiq_config %> <%= sidekiq_concurrency %> <%= sidekiq_queues %>
77
- EOT
78
- end script
@@ -1,37 +0,0 @@
1
- # /etc/init/workers.conf - manage a set of Sidekiqs | https://github.com/mperham/sidekiq/blob/master/examples/upstart/workers.conf
2
-
3
- # This example config should work with Ubuntu 14.10 and below It
4
- # allows you to manage multiple Sidekiq instances with
5
- # Upstart, Ubuntu's native service management tool.
6
- #
7
- # See sidekiq.conf for how to manage a single Sidekiq instance.
8
- #
9
- # Use "stop workers" to stop all Sidekiq instances.
10
- # Use "start workers" to start all instances.
11
- # Use "restart workers" to restart all instances.
12
- # Crazy, right?
13
- #
14
-
15
- description "manages the set of sidekiq processes"
16
-
17
- # This starts upon bootup and stops on shutdown
18
- start on runlevel [2345]
19
- stop on runlevel [06]
20
-
21
- # Set this to the number of Sidekiq processes you want
22
- # to run on this machine
23
- env NUM_WORKERS=2
24
-
25
- pre-start script
26
- for i in `seq 1 ${NUM_WORKERS}`
27
- do
28
- start sidekiq index=$i
29
- done
30
- end script
31
-
32
- post-stop script
33
- for i in `seq 1 ${NUM_WORKERS}`
34
- do
35
- stop sidekiq index=$i
36
- done
37
- end script