capistrano-monit_runit 3.0.0 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +1 -0
- data/Gemfile.lock +11 -0
- data/README.md +35 -22
- data/VERSION +1 -1
- data/capistrano-monit_runit.gemspec +6 -3
- data/lib/capistrano/helpers/base.rb +66 -60
- data/lib/capistrano/helpers/monit.rb +5 -5
- data/lib/capistrano/helpers/runit.rb +16 -15
- data/lib/capistrano/tasks/monit.rake +37 -23
- data/lib/capistrano/tasks/runit.rake +24 -23
- data/templates/monit/monitrc.erb +2 -2
- metadata +16 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8d99cd3e4764b444da5342e877f62b6d84d2fcd5
|
|
4
|
+
data.tar.gz: 48ba994ea84122c81668d642103a33f66528abca
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0cd9646a68f5b3aacba56b4cd89f956e86acd345038bf6445ed37f7496e3aeb315749096015caae946040208c4272e461838670a005a14bf0314ceb34308af37
|
|
7
|
+
data.tar.gz: 08d39d78a5fe06176a1f98f7de46015985e599204ee9bd4fee280f2e51581b7398635373b902d082b723ad66bac81f2912abf3586985bdd5d5125904b246fb35
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
GEM
|
|
2
2
|
remote: http://rubygems.org/
|
|
3
3
|
specs:
|
|
4
|
+
activesupport (4.2.0)
|
|
5
|
+
i18n (~> 0.7)
|
|
6
|
+
json (~> 1.7, >= 1.7.7)
|
|
7
|
+
minitest (~> 5.1)
|
|
8
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
|
9
|
+
tzinfo (~> 1.1)
|
|
4
10
|
addressable (2.3.7)
|
|
5
11
|
builder (3.2.2)
|
|
6
12
|
capistrano (3.4.0)
|
|
@@ -33,8 +39,10 @@ GEM
|
|
|
33
39
|
nokogiri (>= 1.5.10)
|
|
34
40
|
rake
|
|
35
41
|
rdoc
|
|
42
|
+
json (1.8.2)
|
|
36
43
|
jwt (1.4.1)
|
|
37
44
|
mini_portile (0.6.2)
|
|
45
|
+
minitest (5.5.1)
|
|
38
46
|
multi_json (1.11.0)
|
|
39
47
|
multi_xml (0.5.5)
|
|
40
48
|
multipart-post (2.0.0)
|
|
@@ -57,11 +65,14 @@ GEM
|
|
|
57
65
|
net-scp (>= 1.1.2)
|
|
58
66
|
net-ssh (>= 2.8.0)
|
|
59
67
|
thread_safe (0.3.5)
|
|
68
|
+
tzinfo (1.2.2)
|
|
69
|
+
thread_safe (~> 0.1)
|
|
60
70
|
|
|
61
71
|
PLATFORMS
|
|
62
72
|
ruby
|
|
63
73
|
|
|
64
74
|
DEPENDENCIES
|
|
75
|
+
activesupport (>= 3.0)
|
|
65
76
|
bundler (~> 1.7)
|
|
66
77
|
capistrano (~> 3.4)
|
|
67
78
|
jeweler (~> 2.0)
|
data/README.md
CHANGED
|
@@ -6,32 +6,38 @@ Note: This has been updated to support Capistrano >= 3.4. If you still use Capis
|
|
|
6
6
|
|
|
7
7
|
## Versioning
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Use 3.x for capistrano 3
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
For capistrano2, see the capistrano2 branch (will not be updated)
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
## Usage
|
|
14
|
+
|
|
15
|
+
You are unlikely to require this library without any of the libraries
|
|
16
|
+
depending on it.
|
|
14
17
|
|
|
15
|
-
|
|
18
|
+
But if you do require only Runit and Monit capistrano helpers, add this to your Gemfile in the development section.
|
|
16
19
|
|
|
20
|
+
```ruby
|
|
21
|
+
gem 'capistrano-runit_monit', require: false
|
|
17
22
|
```
|
|
18
|
-
Cmnd_Alias RUNITCAPISTRANO = ,
|
|
19
|
-
deploy ALL=NOPASSWD: /bin/chmod u+x /etc/sv/*
|
|
20
|
-
deploy ALL=NOPASSWD: /bin/chmod g+x /etc/sv/*
|
|
21
|
-
deploy ALL=NOPASSWD: /bin/chown deploy\:root /etc/sv/*
|
|
22
|
-
deploy ALL=NOPASSWD: /bin/chown -R deploy\:root /etc/sv/*
|
|
23
|
-
deploy ALL=NOPASSWD: /bin/chown -R deploy\:root /etc/service/*
|
|
24
|
-
deploy ALL=NOPASSWD: /bin/chown -R syslog\:syslog /var/log/service*
|
|
25
|
-
deploy ALL=NOPASSWD: /bin/mkdir -p /etc/service/*
|
|
26
|
-
deploy ALL=NOPASSWD: /bin/mkdir /etc/service/*
|
|
27
|
-
deploy ALL=NOPASSWD: /bin/mkdir -p /var/log/service*
|
|
28
|
-
deploy ALL=NOPASSWD: /bin/mkdir -p /etc/sv/*
|
|
29
|
-
deploy ALL=NOPASSWD: /bin/mkdir /etc/sv/*
|
|
30
|
-
deploy ALL=NOPASSWD: /bin/rm -rf /etc/service/*
|
|
31
23
|
|
|
24
|
+
In your Capfile:
|
|
25
|
+
|
|
26
|
+
```ruby
|
|
27
|
+
require 'capistrano/monit'
|
|
28
|
+
require 'capistrano/runit'
|
|
32
29
|
```
|
|
33
|
-
,/bin/chown myuser:mygroup /var/www/html/*,/bin/chmod 755 /var/www/html2/myapp/*.txt
|
|
34
30
|
|
|
31
|
+
## Sudoing
|
|
32
|
+
|
|
33
|
+
The setup process requires sudo on some files and folders upon creation.
|
|
34
|
+
|
|
35
|
+
You should run the following commands to get the proper list for entries to be created in /etc/sudoers.d
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
cap production runit:sudoers
|
|
39
|
+
cap production monit:sudoers
|
|
40
|
+
```
|
|
35
41
|
|
|
36
42
|
## Services for Monit and Runit
|
|
37
43
|
|
|
@@ -75,8 +81,8 @@ You can add this to deploy.rb or env.rb in order to automatically monitor/unmoni
|
|
|
75
81
|
It is important to unmonitor tasks while deploying as they can trigger stops/restarts to the app that monit thinks are "crashes"
|
|
76
82
|
|
|
77
83
|
```ruby
|
|
78
|
-
before
|
|
79
|
-
after
|
|
84
|
+
before 'deploy:updating', 'monit:unmonitor'
|
|
85
|
+
after 'deploy:finished', 'monit:monitor'
|
|
80
86
|
```
|
|
81
87
|
|
|
82
88
|
If you want monit to automatically start/stop runit instead of triggering seperately
|
|
@@ -105,8 +111,15 @@ cap runit:stop # Stop all runit services for current applicatio
|
|
|
105
111
|
You can add this to deploy.rb or env.rb in order to automatically start/stop tasks
|
|
106
112
|
|
|
107
113
|
```ruby
|
|
108
|
-
before "deploy", "runit:stop"
|
|
109
|
-
after "deploy", "runit:start"
|
|
114
|
+
before "deploy:updating", "runit:stop"
|
|
115
|
+
after "deploy:finished", "runit:start"
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Or just before finishing the update:
|
|
119
|
+
|
|
120
|
+
```ruby
|
|
121
|
+
before "deploy:finished", "runit:stop"
|
|
122
|
+
after "deploy:finished", "runit:start"
|
|
110
123
|
```
|
|
111
124
|
|
|
112
125
|
See each gem if you want to start/stop each service separate instead of together.
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.0.
|
|
1
|
+
3.0.1
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
|
5
|
-
# stub: capistrano-monit_runit 3.0.
|
|
5
|
+
# stub: capistrano-monit_runit 3.0.1 ruby lib
|
|
6
6
|
|
|
7
7
|
Gem::Specification.new do |s|
|
|
8
8
|
s.name = "capistrano-monit_runit"
|
|
9
|
-
s.version = "3.0.
|
|
9
|
+
s.version = "3.0.1"
|
|
10
10
|
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
12
12
|
s.require_paths = ["lib"]
|
|
13
13
|
s.authors = ["Leif Ringstad"]
|
|
14
|
-
s.date = "2015-03-
|
|
14
|
+
s.date = "2015-03-26"
|
|
15
15
|
s.description = "Helpers for capistrano recipes using runit/monit."
|
|
16
16
|
s.email = "leifcr@gmail.com"
|
|
17
17
|
s.extra_rdoc_files = [
|
|
@@ -54,15 +54,18 @@ Gem::Specification.new do |s|
|
|
|
54
54
|
|
|
55
55
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
56
56
|
s.add_runtime_dependency(%q<capistrano>, ["~> 3.4"])
|
|
57
|
+
s.add_runtime_dependency(%q<activesupport>, [">= 3.0"])
|
|
57
58
|
s.add_development_dependency(%q<bundler>, ["~> 1.7"])
|
|
58
59
|
s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
|
|
59
60
|
else
|
|
60
61
|
s.add_dependency(%q<capistrano>, ["~> 3.4"])
|
|
62
|
+
s.add_dependency(%q<activesupport>, [">= 3.0"])
|
|
61
63
|
s.add_dependency(%q<bundler>, ["~> 1.7"])
|
|
62
64
|
s.add_dependency(%q<jeweler>, ["~> 2.0"])
|
|
63
65
|
end
|
|
64
66
|
else
|
|
65
67
|
s.add_dependency(%q<capistrano>, ["~> 3.4"])
|
|
68
|
+
s.add_dependency(%q<activesupport>, [">= 3.0"])
|
|
66
69
|
s.add_dependency(%q<bundler>, ["~> 1.7"])
|
|
67
70
|
s.add_dependency(%q<jeweler>, ["~> 2.0"])
|
|
68
71
|
end
|
|
@@ -1,60 +1,66 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
#
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
1
|
+
require 'active_support'
|
|
2
|
+
require 'active_support/core_ext/string/filters'
|
|
3
|
+
module Capistrano
|
|
4
|
+
module Helpers
|
|
5
|
+
##
|
|
6
|
+
# Helper functions for both runit and monit
|
|
7
|
+
module Base
|
|
8
|
+
def user_app_env_underscore
|
|
9
|
+
"#{fetch(:user)}_#{fetch(:application)}_#{environment}".squish.downcase.gsub(/[\s|-]/, '_')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def user_app_env_underscore_short
|
|
13
|
+
"#{fetch(:user)[0...1]}_#{environment[0...1]}_#{fetch(:application)}".squish.downcase.gsub(/[\s|-]/, '_')
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def user_app_env_underscore_short_char_safe
|
|
17
|
+
user_app_env_underscore_short.squish.downcase.gsub(/[\s|-]/, '_')
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def app_env_underscore
|
|
21
|
+
"#{fetch(:application)}_#{environment}".squish.downcase.gsub(/[\s|-]/, '_')
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
##
|
|
25
|
+
# Automatically sets the environment based on presence of
|
|
26
|
+
# :stage (multistage)
|
|
27
|
+
# :rails_env
|
|
28
|
+
# RAILS_ENV variable;
|
|
29
|
+
#
|
|
30
|
+
# Defaults to "production" if not found
|
|
31
|
+
#
|
|
32
|
+
def environment # rubocop:disable Metrics/MethodLength
|
|
33
|
+
if !fetch(:rails_env).nil?
|
|
34
|
+
fetch(:rails_env)
|
|
35
|
+
elsif !fetch(:rack_env).nil?
|
|
36
|
+
fetch(:rack_env)
|
|
37
|
+
elsif !fetch(:stage).nil?
|
|
38
|
+
fetch(:stage)
|
|
39
|
+
else
|
|
40
|
+
info '---------------------------------------------------------------'
|
|
41
|
+
info '- Stage, rack or rails environment isn\'t set in -'
|
|
42
|
+
info '- :stage, :rails_env or :rack_env, defaulting to \'production\' -'
|
|
43
|
+
info '---------------------------------------------------------------'
|
|
44
|
+
'production'
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def template_to_s_io(template_file)
|
|
49
|
+
fail "Cannot find template #{template_file}" unless File.exist?(template_file)
|
|
50
|
+
StringIO.new(ERB.new(File.read(template_file)).result(binding))
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
##
|
|
54
|
+
# Execute a rake taske using the proper env.
|
|
55
|
+
# run_rake db:migrate
|
|
56
|
+
#
|
|
57
|
+
def run_rake(task)
|
|
58
|
+
within(current_path) do
|
|
59
|
+
with rails_env: fetch(:rails_env) do
|
|
60
|
+
execute :rake, "#{task}"
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -34,13 +34,13 @@ module Capistrano
|
|
|
34
34
|
#
|
|
35
35
|
# This will symlink the service to enabled service, but not start or reload monit configuration
|
|
36
36
|
#
|
|
37
|
-
def
|
|
38
|
-
return unless test("[ -h #{File.join(
|
|
39
|
-
execute :ln, "-sf #{File.join(
|
|
37
|
+
def enable_monitor(service_conf_filename)
|
|
38
|
+
return unless test("[ ! -h #{File.join(fetch(:monit_enabled_path), service_conf_filename)} ]")
|
|
39
|
+
execute :ln, "-sf #{File.join(fetch(:monit_available_path), service_conf_filename)} #{File.join(fetch(:monit_enabled_path), service_conf_filename)}" # rubocop:disable Metrics/LineLength:
|
|
40
40
|
end
|
|
41
41
|
|
|
42
|
-
def
|
|
43
|
-
execute :rm, "-f #{File.join(
|
|
42
|
+
def disable_monitor(service_conf_filename)
|
|
43
|
+
execute :rm, "-f #{File.join(fetch(:monit_enabled_path), service_conf_filename)}"
|
|
44
44
|
end
|
|
45
45
|
end
|
|
46
46
|
end
|
|
@@ -3,7 +3,7 @@ module Capistrano
|
|
|
3
3
|
module Runit
|
|
4
4
|
# Any command sent to this function controls _all_ services related to the app
|
|
5
5
|
def runit_app_services_control(command)
|
|
6
|
-
return unless test("[
|
|
6
|
+
return unless test("[ -h '#{runit_etc_service_app_symlink_name}' ]")
|
|
7
7
|
execute :sudo, :sv, "#{command} #{runit_etc_service_app_symlink_name}"
|
|
8
8
|
end
|
|
9
9
|
|
|
@@ -25,8 +25,8 @@ module Capistrano
|
|
|
25
25
|
# control_service(service_name, "restart")
|
|
26
26
|
# end
|
|
27
27
|
|
|
28
|
-
def control_service(service_name, command, arguments, _ignore_error = false)
|
|
29
|
-
return unless test "[
|
|
28
|
+
def control_service(service_name, command, arguments = '', _ignore_error = false)
|
|
29
|
+
return unless test "[ -h '#{runit_service_path(service_name)}/run' ]"
|
|
30
30
|
execute :sv, "#{arguments} #{command} #{runit_service_path(service_name)}"
|
|
31
31
|
end
|
|
32
32
|
|
|
@@ -36,17 +36,20 @@ module Capistrano
|
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
def disable_service(service_name)
|
|
39
|
-
|
|
39
|
+
begin
|
|
40
|
+
force_control_service(service_name, 'force-stop', '', true) # force-stop the service before disabling it
|
|
41
|
+
rescue
|
|
42
|
+
end
|
|
40
43
|
within(runit_service_path(service_name)) do
|
|
41
|
-
execute :rm, '-f ./run' if test
|
|
42
|
-
execute :rm, '-f ./finish' if test
|
|
44
|
+
execute :rm, '-f ./run' if test "[ -h '#{runit_service_run_file(service_name)}' ]"
|
|
45
|
+
execute :rm, '-f ./finish' if test "[ -h '#{runit_service_finish_file(service_name)}' ]"
|
|
43
46
|
end
|
|
44
47
|
end
|
|
45
48
|
|
|
46
49
|
def enable_service(service_name)
|
|
47
50
|
within(runit_service_path(service_name)) do
|
|
48
|
-
execute :ln, "-sf #{runit_service_run_config_file} ./run" if test
|
|
49
|
-
execute :ln, "-sf #{runit_service_finish_config_file} ./finish" if test
|
|
51
|
+
execute :ln, "-sf #{runit_service_run_config_file(service_name)} ./run" if test "[ ! -h '#{runit_service_run_file(service_name)}' ]"
|
|
52
|
+
execute :ln, "-sf #{runit_service_finish_config_file(service_name)} ./finish" if test "[ ! -h '#{runit_service_finish_file(service_name)}' ]"
|
|
50
53
|
end
|
|
51
54
|
end
|
|
52
55
|
|
|
@@ -55,21 +58,19 @@ module Capistrano
|
|
|
55
58
|
end
|
|
56
59
|
|
|
57
60
|
def runit_set_executable_files(service_name) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
|
58
|
-
if test("[ -f '#{runit_service_run_config_file(service_name)}']")
|
|
61
|
+
if test("[ -f '#{runit_service_run_config_file(service_name)}' ]")
|
|
59
62
|
execute :chmod, "775 #{runit_service_run_config_file(service_name)}"
|
|
60
63
|
end
|
|
61
|
-
if test("[ -f '#{runit_service_finish_config_file(service_name)}']")
|
|
62
|
-
execute :chmod, "775 #{runit_service_finish_config_file(service_name)}"
|
|
64
|
+
if test("[ -f '#{runit_service_finish_config_file(service_name)}' ]")
|
|
65
|
+
execute :chmod, "775 #{runit_service_finish_config_file (service_name)}"
|
|
63
66
|
end
|
|
64
67
|
|
|
65
|
-
if test("[ -f '#{runit_service_log_run_file(service_name)}']")
|
|
68
|
+
if test("[ -f '#{runit_service_log_run_file(service_name)}' ]")
|
|
66
69
|
execute :chmod, "775 #{runit_service_log_run_file(service_name)}"
|
|
67
70
|
end
|
|
68
71
|
|
|
69
|
-
if test("[ -d '#{runit_service_control_path(service_name)}']") # rubocop:disable Style/GuardClause
|
|
72
|
+
if test("[ -d '#{runit_service_control_path(service_name)}' ]") # rubocop:disable Style/GuardClause
|
|
70
73
|
execute :chmod, "775 -R #{runit_service_control_path(service_name)}"
|
|
71
|
-
# execute :chmod, 'u+x -R runit_service_control_path(service_name)'
|
|
72
|
-
# execute :chmod, 'g+x -R runit_service_control_path(service_name)'
|
|
73
74
|
end
|
|
74
75
|
end
|
|
75
76
|
|
|
@@ -7,6 +7,11 @@
|
|
|
7
7
|
# Let monit monitor any long-running processes to ensure they keep
|
|
8
8
|
# within the limits set by you.
|
|
9
9
|
|
|
10
|
+
require 'capistrano/dsl/base_paths'
|
|
11
|
+
require 'capistrano/dsl/monit_paths'
|
|
12
|
+
require 'capistrano/helpers/base'
|
|
13
|
+
require 'capistrano/helpers/monit'
|
|
14
|
+
|
|
10
15
|
include Capistrano::DSL::BasePaths
|
|
11
16
|
include Capistrano::DSL::MonitPaths
|
|
12
17
|
include Capistrano::Helpers::Base
|
|
@@ -28,37 +33,24 @@ namespace :load do
|
|
|
28
33
|
set :monit_httpd_signature, 'enable' # or enable
|
|
29
34
|
set :monit_httpd_port, '2812'
|
|
30
35
|
|
|
31
|
-
set :monit_daemon_time, '
|
|
32
|
-
set :monit_start_delay, '
|
|
36
|
+
set :monit_daemon_time, '30'
|
|
37
|
+
set :monit_start_delay, '30'
|
|
33
38
|
|
|
34
39
|
set :monit_monitrc_template, File.join(File.expand_path(File.join(File.dirname(__FILE__), '../../../templates', 'monit')), 'monitrc.erb') # rubocop:disable Metrics/LineLength:
|
|
35
40
|
set :monit_application_conf_template, File.join(File.expand_path(File.join(File.dirname(__FILE__), '../../../templates', 'monit')), 'app_include.conf.erb') # rubocop:disable Metrics/LineLength:
|
|
36
41
|
|
|
37
42
|
set :monit_application_conf_file, proc { File.join(fetch(:monit_dir), 'monit.conf') }
|
|
43
|
+
|
|
44
|
+
set :monit_event_dir, File.join('/var', 'run', 'monit')
|
|
38
45
|
end
|
|
39
46
|
end
|
|
40
47
|
|
|
41
48
|
namespace :monit do
|
|
42
|
-
desc 'Setup monit for the application'
|
|
43
|
-
task :setup do
|
|
44
|
-
on roles(:app) do |host|
|
|
45
|
-
info "MONIT: Setting up initial monit configuration on #{host}"
|
|
46
|
-
if test "[ ! -d #{fetch(:monit_dir)} ]"
|
|
47
|
-
execute :mkdir, "-p #{fetch(:monit_dir)}"
|
|
48
|
-
end
|
|
49
|
-
if test "[ ! -d #{fetch(:monit_available_path)} ]"
|
|
50
|
-
execute :mkdir, "-p #{fetch(:monit_available_path)}"
|
|
51
|
-
end
|
|
52
|
-
if test "[ ! -d #{fetch(:monit_enabled_path)} ]"
|
|
53
|
-
execute :mkdir, "-p #{fetch(:monit_enabled_path)}"
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
49
|
desc 'Get the config needed to add to sudoers'
|
|
59
50
|
task :sudoers do
|
|
60
51
|
run_locally do
|
|
61
52
|
info '---------------ENTRIES FOR SUDOERS (Monit)---------------------'
|
|
53
|
+
puts "# Sudo monit entries for #{fetch(:application)}"
|
|
62
54
|
puts "#{fetch(:user)} ALL=NOPASSWD: /bin/chmod 0700 #{monit_monitrc_file}"
|
|
63
55
|
puts "#{fetch(:user)} ALL=NOPASSWD: /bin/chmod 0775 #{monit_etc_path}"
|
|
64
56
|
puts "#{fetch(:user)} ALL=NOPASSWD: /bin/chmod 0700 #{monit_etc_path}"
|
|
@@ -70,22 +62,43 @@ namespace :monit do
|
|
|
70
62
|
puts "#{fetch(:user)} ALL=NOPASSWD: /bin/chown root\\:root #{monit_monitrc_file}"
|
|
71
63
|
puts "#{fetch(:user)} ALL=NOPASSWD: /usr/bin/monit *"
|
|
72
64
|
puts "#{fetch(:user)} ALL=NOPASSWD: /usr/sbin/service monit *"
|
|
65
|
+
puts "#{fetch(:user)} ALL=NOPASSWD: /bin/mkdir -p #{fetch(:monit_event_dir)}"
|
|
73
66
|
info '---------------------------------------------------------------'
|
|
74
67
|
end
|
|
75
68
|
# info "#{fetch(:user)} ALL=NOPASSWD: /bin/chown deploy:root #{monit_monitrc_file}"
|
|
76
69
|
end
|
|
77
70
|
|
|
71
|
+
desc 'Setup monit for the application'
|
|
72
|
+
task :setup do
|
|
73
|
+
on roles(:app) do |host|
|
|
74
|
+
info "MONIT: Setting up initial monit configuration on #{host}"
|
|
75
|
+
if test "[ ! -d #{fetch(:monit_dir)} ]"
|
|
76
|
+
execute :mkdir, "-p #{fetch(:monit_dir)}"
|
|
77
|
+
end
|
|
78
|
+
if test "[ ! -d #{fetch(:monit_available_path)} ]"
|
|
79
|
+
execute :mkdir, "-p #{fetch(:monit_available_path)}"
|
|
80
|
+
end
|
|
81
|
+
if test "[ ! -d #{fetch(:monit_enabled_path)} ]"
|
|
82
|
+
execute :mkdir, "-p #{fetch(:monit_enabled_path)}"
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
if test("[ ! -d #{monit_etc_conf_d_path} ]")
|
|
86
|
+
execute :sudo, :mkdir, "-p #{monit_etc_conf_d_path}"
|
|
87
|
+
end
|
|
88
|
+
execute :sudo, :chmod, "6775 #{monit_etc_conf_d_path}"
|
|
89
|
+
execute :sudo, :chown, "#{fetch(:user)}:root #{monit_etc_conf_d_path}"
|
|
90
|
+
|
|
91
|
+
# Upload application global monit include file
|
|
92
|
+
upload! template_to_s_io(fetch(:monit_application_conf_template)), fetch(:monit_application_conf_file)
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
78
96
|
desc 'Setup main monit config file (/etc/monit/monitrc)'
|
|
79
97
|
task :main_config do
|
|
80
98
|
on roles(:app) do |host|
|
|
81
99
|
set :createmonitrc, ask("Create #{monit_monitrc_file} [Y/n]", 'Y')
|
|
82
100
|
if fetch(:createmonitrc) == 'Y'
|
|
83
101
|
info "MONIT: Creating #{monit_monitrc_file} on #{host}"
|
|
84
|
-
if test("[ ! -d #{monit_etc_conf_d_path} ]")
|
|
85
|
-
execute :sudo, :mkdir, "-p #{monit_etc_conf_d_path}"
|
|
86
|
-
execute :sudo, :chmod, "6775 #{monit_etc_conf_d_path}"
|
|
87
|
-
execute :sudo, :chown, "#{fetch(:user)}:root #{monit_etc_conf_d_path}"
|
|
88
|
-
end
|
|
89
102
|
execute :sudo, :chown, "#{fetch(:user)}:root #{monit_etc_path}"
|
|
90
103
|
execute :sudo, :chmod, "0775 #{monit_etc_path}"
|
|
91
104
|
execute :sudo, :chown, "#{fetch(:user)}:root #{monit_monitrc_file}"
|
|
@@ -93,6 +106,7 @@ namespace :monit do
|
|
|
93
106
|
execute :sudo, :chmod, "0700 #{monit_monitrc_file}"
|
|
94
107
|
execute :sudo, :chown, "root:root #{monit_monitrc_file}"
|
|
95
108
|
execute :sudo, :service, 'monit restart'
|
|
109
|
+
execute :sudo, :mkdir, "-p #{fetch(:monit_event_dir)}"
|
|
96
110
|
info "MONIT: Sleeping for #{fetch(:monit_start_delay).to_i} seconds to wait for monit to be ready"
|
|
97
111
|
sleep(fetch(:monit_start_delay).to_i)
|
|
98
112
|
end
|
|
@@ -36,6 +36,7 @@ namespace :runit do
|
|
|
36
36
|
task :sudoers do
|
|
37
37
|
run_locally do
|
|
38
38
|
info '---------------ENTRIES FOR SUDOERS (Runit)---------------------'
|
|
39
|
+
puts "# Sudo runit entries for #{fetch(:application)}"
|
|
39
40
|
puts "#{fetch(:user)} ALL=NOPASSWD: /bin/mkdir -p #{runit_user_base_path}"
|
|
40
41
|
puts "#{fetch(:user)} ALL=NOPASSWD: /bin/chown #{fetch(:user)}\\:root #{runit_user_base_path}"
|
|
41
42
|
puts "#{fetch(:user)} ALL=NOPASSWD: /bin/chmod 6775 #{runit_user_base_path}"
|
|
@@ -71,16 +72,13 @@ namespace :runit do
|
|
|
71
72
|
on roles(:app) do |host|
|
|
72
73
|
# set :pw, ask("Sudo password", '')
|
|
73
74
|
# execute :echo, "#{fetch(:pw)} | sudo -S ls /"
|
|
74
|
-
if test("[ ! -d '#{runit_user_base_path}' ]")
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
execute :sudo, :chown, "#{fetch(:user)}:root '#{runit_etc_service_path}'"
|
|
82
|
-
execute :sudo, :chmod, "6775 '#{runit_etc_service_path}'"
|
|
83
|
-
end
|
|
75
|
+
execute :sudo, :mkdir, "-p '#{runit_user_base_path}'" if test("[ ! -d '#{runit_user_base_path}' ]")
|
|
76
|
+
execute :sudo, :chown, "#{fetch(:user)}:root '#{runit_user_base_path}'"
|
|
77
|
+
execute :sudo, :chmod, "6775 '#{runit_user_base_path}'"
|
|
78
|
+
|
|
79
|
+
execute :sudo, :mkdir, "-p '#{runit_etc_service_path}'" if test("[ ! -d '#{runit_etc_service_path}' ]")
|
|
80
|
+
execute :sudo, :chown, "#{fetch(:user)}:root '#{runit_etc_service_path}'"
|
|
81
|
+
execute :sudo, :chmod, "6775 '#{runit_etc_service_path}'"
|
|
84
82
|
within("#{runit_user_base_path}") do
|
|
85
83
|
execute :mkdir, "-p #{app_env_folder}"
|
|
86
84
|
end
|
|
@@ -113,6 +111,13 @@ namespace :runit do
|
|
|
113
111
|
info "RUNIT: Created inital runit log services in #{runit_base_log_path} for #{fetch(:application)} on #{host}"
|
|
114
112
|
end
|
|
115
113
|
end
|
|
114
|
+
# '[INTERNAL] create /etc/sv folders and upload base templates needed'
|
|
115
|
+
task :runit_ensure_shared_sockets_and_pids_folders do
|
|
116
|
+
on roles(:app) do |host|
|
|
117
|
+
execute :mkdir, fetch(:pids_path) if test("[ ! -d #{fetch(:pids_path)} ]")
|
|
118
|
+
execute :mkdir, fetch(:sockets_path) if test("[ ! -d #{fetch(:sockets_path)} ]")
|
|
119
|
+
end
|
|
120
|
+
end
|
|
116
121
|
end
|
|
117
122
|
|
|
118
123
|
desc 'Disable runit services for application'
|
|
@@ -148,19 +153,14 @@ namespace :runit do
|
|
|
148
153
|
end
|
|
149
154
|
end
|
|
150
155
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
desc 'Only start services once. Will not restart if they fail.'
|
|
162
|
-
task :once do
|
|
163
|
-
runit_app_services_control('once')
|
|
156
|
+
%w(stop start once restart).each do |single_cmd|
|
|
157
|
+
desc "#{single_cmd} runit services for application"
|
|
158
|
+
task single_cmd.to_sym do
|
|
159
|
+
on roles(:app) do |host|
|
|
160
|
+
info "RUNIT: #{single_cmd} on #{host}"
|
|
161
|
+
runit_app_services_control(single_cmd)
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
164
|
end
|
|
165
165
|
end
|
|
166
166
|
|
|
@@ -170,3 +170,4 @@ after 'deploy:updated', 'runit:enable'
|
|
|
170
170
|
# after 'deploy:setup', 'runit:setup'
|
|
171
171
|
after 'runit:setup', 'runit:setup:runit_create_app_services'
|
|
172
172
|
after 'runit:setup:runit_create_app_services', 'runit:setup:runit_create_app_log_services'
|
|
173
|
+
after 'runit:setup:runit_create_app_services', 'runit:setup:runit_ensure_shared_sockets_and_pids_folders'
|
data/templates/monit/monitrc.erb
CHANGED
|
@@ -8,8 +8,8 @@ set statefile /var/lib/monit/state
|
|
|
8
8
|
set idfile /var/lib/monit/id
|
|
9
9
|
|
|
10
10
|
set eventqueue
|
|
11
|
-
basedir
|
|
12
|
-
slots 100
|
|
11
|
+
basedir <%= fetch(:monit_event_dir) %> # set the base directory where events will be stored
|
|
12
|
+
slots 100 # optionaly limit the queue size
|
|
13
13
|
|
|
14
14
|
<%= fetch(:mail_alert_settings) %>
|
|
15
15
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: capistrano-monit_runit
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.0.
|
|
4
|
+
version: 3.0.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Leif Ringstad
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-03-
|
|
11
|
+
date: 2015-03-26 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: capistrano
|
|
@@ -24,6 +24,20 @@ dependencies:
|
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '3.4'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: activesupport
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ">="
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '3.0'
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '3.0'
|
|
27
41
|
- !ruby/object:Gem::Dependency
|
|
28
42
|
name: bundler
|
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|