rbg 0.9.1 → 0.9.2
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.
- data/lib/rbg.rb +40 -6
- metadata +4 -4
data/lib/rbg.rb
CHANGED
@@ -25,7 +25,7 @@ module Rbg
|
|
25
25
|
self.child_processes = Array.new
|
26
26
|
|
27
27
|
# Set the process name (Parent)
|
28
|
-
$0="#{self.config.name}[
|
28
|
+
$0="#{self.config.name}[Parent]"
|
29
29
|
|
30
30
|
# Debug information
|
31
31
|
puts "New parent process: #{Process.pid}"
|
@@ -55,12 +55,26 @@ module Rbg
|
|
55
55
|
Signal.trap('INT', proc {})
|
56
56
|
|
57
57
|
# Parent loop, the purpose of this is simply to do nothing until we get a signal
|
58
|
+
# We will exit if all child processes die
|
58
59
|
# We may add memory management code here in the future
|
59
60
|
loop do
|
60
|
-
sleep
|
61
|
+
sleep 2
|
62
|
+
self.child_processes.dup.each do |p|
|
63
|
+
begin
|
64
|
+
Process.getpgid( p )
|
65
|
+
rescue Errno::ESRCH
|
66
|
+
puts "Child process #{p} has died"
|
67
|
+
child_processes.delete(p)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
if child_processes.empty?
|
71
|
+
puts "All child processes died, exiting parent"
|
72
|
+
Process.exit(0)
|
73
|
+
end
|
61
74
|
end
|
62
|
-
|
63
75
|
end
|
76
|
+
# Ensure the new parent is detached
|
77
|
+
Process.detach(self.child_processes.last)
|
64
78
|
end
|
65
79
|
|
66
80
|
# Wrapper to fork multiple workers
|
@@ -123,7 +137,7 @@ module Rbg
|
|
123
137
|
STDOUT.flush
|
124
138
|
|
125
139
|
# Set the process name
|
126
|
-
$0="#{self.config.name}[
|
140
|
+
$0="#{self.config.name}[Master]"
|
127
141
|
|
128
142
|
# Fork a Parent process
|
129
143
|
# This will load the before_fork in a clean process then fork the script as required
|
@@ -154,9 +168,17 @@ module Rbg
|
|
154
168
|
Process.exit(0)
|
155
169
|
})
|
156
170
|
|
157
|
-
# Main loop,
|
171
|
+
# Main loop, we mostly idle, but check if the parent we created has died and exit
|
158
172
|
loop do
|
159
|
-
sleep
|
173
|
+
sleep 2
|
174
|
+
self.child_processes.each do |p|
|
175
|
+
begin
|
176
|
+
Process.getpgid( p )
|
177
|
+
rescue Errno::ESRCH
|
178
|
+
puts "Parent process #{p} has died, exiting master"
|
179
|
+
Process.exit(0)
|
180
|
+
end
|
181
|
+
end
|
160
182
|
end
|
161
183
|
end
|
162
184
|
|
@@ -179,6 +201,18 @@ module Rbg
|
|
179
201
|
self.config_file = config_file
|
180
202
|
self.load_config
|
181
203
|
|
204
|
+
# If the PID file is set and exists, check that the process is not running
|
205
|
+
if self.config.pid_path and File.exists?(self.config.pid_path)
|
206
|
+
oldpid = File.read(self.config.pid_path)
|
207
|
+
begin
|
208
|
+
Process.getpgid( oldpid.to_i )
|
209
|
+
raise Error, "Process already running! PID #{oldpid}"
|
210
|
+
rescue Errno::ESRCH
|
211
|
+
# No running process
|
212
|
+
false
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
182
216
|
# Initialize child process array
|
183
217
|
self.child_processes = Array.new
|
184
218
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 63
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 9
|
9
|
-
-
|
10
|
-
version: 0.9.
|
9
|
+
- 2
|
10
|
+
version: 0.9.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Charlie Smurthwaite
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-10-
|
18
|
+
date: 2010-10-26 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|