foreman 0.17.0 → 0.18.0
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/foreman-runner +2 -0
- data/data/example/ticker +6 -0
- data/lib/foreman/engine.rb +25 -12
- data/lib/foreman/version.rb +1 -1
- data/spec/foreman/export/upstart_spec.rb +0 -1
- metadata +3 -2
data/bin/foreman-runner
ADDED
data/data/example/ticker
CHANGED
data/lib/foreman/engine.rb
CHANGED
@@ -3,6 +3,7 @@ require "foreman/process"
|
|
3
3
|
require "foreman/utils"
|
4
4
|
require "pty"
|
5
5
|
require "tempfile"
|
6
|
+
require "timeout"
|
6
7
|
require "term/ansicolor"
|
7
8
|
require "fileutils"
|
8
9
|
|
@@ -58,8 +59,8 @@ class Foreman::Engine
|
|
58
59
|
fork process, options, environment
|
59
60
|
end
|
60
61
|
|
61
|
-
trap("TERM") { puts "SIGTERM received";
|
62
|
-
trap("INT") { puts "SIGINT received";
|
62
|
+
trap("TERM") { puts "SIGTERM received"; terminate_gracefully }
|
63
|
+
trap("INT") { puts "SIGINT received"; terminate_gracefully }
|
63
64
|
|
64
65
|
watch_for_termination
|
65
66
|
end
|
@@ -69,8 +70,8 @@ class Foreman::Engine
|
|
69
70
|
|
70
71
|
fork processes[name], options, environment
|
71
72
|
|
72
|
-
trap("TERM") { puts "SIGTERM received";
|
73
|
-
trap("INT") { puts "SIGINT received";
|
73
|
+
trap("TERM") { puts "SIGTERM received"; terminate_gracefully }
|
74
|
+
trap("INT") { puts "SIGINT received"; terminate_gracefully }
|
74
75
|
|
75
76
|
watch_for_termination
|
76
77
|
end
|
@@ -107,12 +108,12 @@ private ######################################################################
|
|
107
108
|
|
108
109
|
def run(process)
|
109
110
|
proctitle "ruby: foreman #{process.name}"
|
111
|
+
trap("SIGINT", "IGNORE")
|
110
112
|
|
111
113
|
begin
|
112
114
|
Dir.chdir directory do
|
113
|
-
|
114
|
-
|
115
|
-
PTY.spawn("#{process.command} 2>&1") do |stdin, stdout, pid|
|
115
|
+
PTY.spawn(runner, process.command) do |stdin, stdout, pid|
|
116
|
+
trap("SIGTERM") { Process.kill("SIGTERM", pid) }
|
116
117
|
until stdin.eof?
|
117
118
|
info stdin.gets, process
|
118
119
|
end
|
@@ -126,11 +127,9 @@ private ######################################################################
|
|
126
127
|
end
|
127
128
|
end
|
128
129
|
|
129
|
-
def kill_all(signal="
|
130
|
-
info "terminating"
|
130
|
+
def kill_all(signal="SIGTERM")
|
131
131
|
running_processes.each do |pid, process|
|
132
|
-
|
133
|
-
Process.kill(signal, pid)
|
132
|
+
Process.kill(signal, pid) rescue Errno::ESRCH
|
134
133
|
end
|
135
134
|
end
|
136
135
|
|
@@ -179,8 +178,9 @@ private ######################################################################
|
|
179
178
|
pid, status = Process.wait2
|
180
179
|
process = running_processes.delete(pid)
|
181
180
|
info "process terminated", process
|
181
|
+
terminate_gracefully
|
182
182
|
kill_all
|
183
|
-
|
183
|
+
rescue Errno::ECHILD
|
184
184
|
end
|
185
185
|
|
186
186
|
def running_processes
|
@@ -217,4 +217,17 @@ private ######################################################################
|
|
217
217
|
environment
|
218
218
|
end
|
219
219
|
|
220
|
+
def runner
|
221
|
+
File.expand_path("../../../bin/foreman-runner", __FILE__)
|
222
|
+
end
|
223
|
+
|
224
|
+
def terminate_gracefully
|
225
|
+
info "sending SIGTERM to all processes"
|
226
|
+
kill_all "SIGTERM"
|
227
|
+
Timeout.timeout(3) { Process.waitall }
|
228
|
+
rescue Timeout::Error
|
229
|
+
info "sending SIGKILL to all processes"
|
230
|
+
kill_all "SIGKILL"
|
231
|
+
end
|
232
|
+
|
220
233
|
end
|
data/lib/foreman/version.rb
CHANGED
@@ -13,7 +13,6 @@ describe Foreman::Export::Upstart do
|
|
13
13
|
|
14
14
|
it "exports to the filesystem" do
|
15
15
|
upstart.export("/tmp/init")
|
16
|
-
p [:d, Dir["/tmp/init/**"]]
|
17
16
|
|
18
17
|
File.read("/tmp/init/app.conf").should == example_export_file("upstart/app.conf")
|
19
18
|
File.read("/tmp/init/app-alpha.conf").should == example_export_file("upstart/app-alpha.conf")
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: foreman
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.18.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- David Dollar
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-06-
|
13
|
+
date: 2011-06-03 00:00:00 -04:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -122,6 +122,7 @@ extra_rdoc_files: []
|
|
122
122
|
|
123
123
|
files:
|
124
124
|
- bin/foreman
|
125
|
+
- bin/foreman-runner
|
125
126
|
- data/example/error
|
126
127
|
- data/example/log/neverdie.log
|
127
128
|
- data/example/Procfile
|