mlanett-daemons 1.0.13
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/.gitignore +1 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +17 -0
- data/LICENSE +29 -0
- data/README +223 -0
- data/Rakefile +15 -0
- data/Releases +126 -0
- data/TODO +6 -0
- data/daemons.gemspec +27 -0
- data/daemons.tmproj +56 -0
- data/examples/call/call.rb +56 -0
- data/examples/call/call.rb.log +1 -0
- data/examples/call/call_monitor.rb +55 -0
- data/examples/daemonize/daemonize.rb +20 -0
- data/examples/run/ctrl_crash.rb +17 -0
- data/examples/run/ctrl_exec.rb +16 -0
- data/examples/run/ctrl_exit.rb +15 -0
- data/examples/run/ctrl_keep_pid_files.rb +17 -0
- data/examples/run/ctrl_monitor.rb +16 -0
- data/examples/run/ctrl_multiple.rb +16 -0
- data/examples/run/ctrl_normal.rb +12 -0
- data/examples/run/ctrl_ontop.rb +16 -0
- data/examples/run/ctrl_optionparser.rb +43 -0
- data/examples/run/ctrl_proc.rb +25 -0
- data/examples/run/ctrl_proc.rb.output +101 -0
- data/examples/run/ctrl_proc_multiple.rb +22 -0
- data/examples/run/ctrl_proc_multiple.rb.output +2 -0
- data/examples/run/ctrl_proc_simple.rb +17 -0
- data/examples/run/myserver.rb +12 -0
- data/examples/run/myserver_crashing.rb +14 -0
- data/examples/run/myserver_crashing.rb.output +30 -0
- data/examples/run/myserver_exiting.rb +8 -0
- data/html/classes/Daemonize.html +497 -0
- data/html/classes/Daemons.html +683 -0
- data/html/classes/Daemons/Application.html +836 -0
- data/html/classes/Daemons/ApplicationGroup.html +508 -0
- data/html/classes/Daemons/CmdException.html +113 -0
- data/html/classes/Daemons/Controller.html +429 -0
- data/html/classes/Daemons/Error.html +113 -0
- data/html/classes/Daemons/Exception.html +111 -0
- data/html/classes/Daemons/Monitor.html +263 -0
- data/html/classes/Daemons/Optparse.html +244 -0
- data/html/classes/Daemons/Pid.html +339 -0
- data/html/classes/Daemons/PidFile.html +441 -0
- data/html/classes/Daemons/PidMem.html +126 -0
- data/html/classes/Daemons/RuntimeException.html +113 -0
- data/html/classes/Daemons/SystemError.html +163 -0
- data/html/created.rid +1 -0
- data/html/files/README.html +377 -0
- data/html/files/Releases.html +342 -0
- data/html/files/TODO.html +121 -0
- data/html/files/lib/daemons/application_group_rb.html +101 -0
- data/html/files/lib/daemons/application_rb.html +110 -0
- data/html/files/lib/daemons/cmdline_rb.html +101 -0
- data/html/files/lib/daemons/controller_rb.html +101 -0
- data/html/files/lib/daemons/daemonize_rb.html +207 -0
- data/html/files/lib/daemons/exceptions_rb.html +101 -0
- data/html/files/lib/daemons/monitor_rb.html +108 -0
- data/html/files/lib/daemons/pid_rb.html +108 -0
- data/html/files/lib/daemons/pidfile_rb.html +108 -0
- data/html/files/lib/daemons/pidmem_rb.html +108 -0
- data/html/files/lib/daemons_rb.html +117 -0
- data/html/fr_class_index.html +41 -0
- data/html/fr_file_index.html +40 -0
- data/html/fr_method_index.html +91 -0
- data/html/index.html +24 -0
- data/html/rdoc-style.css +208 -0
- data/lib/daemons.rb +284 -0
- data/lib/daemons/application.rb +376 -0
- data/lib/daemons/application_group.rb +152 -0
- data/lib/daemons/cmdline.rb +117 -0
- data/lib/daemons/controller.rb +137 -0
- data/lib/daemons/daemonize.rb +263 -0
- data/lib/daemons/exceptions.rb +28 -0
- data/lib/daemons/monitor.rb +136 -0
- data/lib/daemons/pid.rb +115 -0
- data/lib/daemons/pidfile.rb +111 -0
- data/lib/daemons/pidmem.rb +10 -0
- data/lib/daemons/version.rb +3 -0
- data/setup.rb +1360 -0
- data/test/call_as_daemon.rb +12 -0
- data/test/tc_main.rb +24 -0
- data/test/test1.rb +19 -0
- data/test/testapp.rb +11 -0
- metadata +170 -0
@@ -0,0 +1,836 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
7
|
+
<head>
|
8
|
+
<title>Class: Daemons::Application</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
11
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
12
|
+
<script type="text/javascript">
|
13
|
+
// <![CDATA[
|
14
|
+
|
15
|
+
function popupCode( url ) {
|
16
|
+
window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
|
17
|
+
}
|
18
|
+
|
19
|
+
function toggleCode( id ) {
|
20
|
+
if ( document.getElementById )
|
21
|
+
elem = document.getElementById( id );
|
22
|
+
else if ( document.all )
|
23
|
+
elem = eval( "document.all." + id );
|
24
|
+
else
|
25
|
+
return false;
|
26
|
+
|
27
|
+
elemStyle = elem.style;
|
28
|
+
|
29
|
+
if ( elemStyle.display != "block" ) {
|
30
|
+
elemStyle.display = "block"
|
31
|
+
} else {
|
32
|
+
elemStyle.display = "none"
|
33
|
+
}
|
34
|
+
|
35
|
+
return true;
|
36
|
+
}
|
37
|
+
|
38
|
+
// Make codeblocks hidden by default
|
39
|
+
document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
|
40
|
+
|
41
|
+
// ]]>
|
42
|
+
</script>
|
43
|
+
|
44
|
+
</head>
|
45
|
+
<body>
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
<div id="classHeader">
|
50
|
+
<table class="header-table">
|
51
|
+
<tr class="top-aligned-row">
|
52
|
+
<td><strong>Class</strong></td>
|
53
|
+
<td class="class-name-in-header">Daemons::Application</td>
|
54
|
+
</tr>
|
55
|
+
<tr class="top-aligned-row">
|
56
|
+
<td><strong>In:</strong></td>
|
57
|
+
<td>
|
58
|
+
<a href="../../files/lib/daemons/application_rb.html">
|
59
|
+
lib/daemons/application.rb
|
60
|
+
</a>
|
61
|
+
<br />
|
62
|
+
</td>
|
63
|
+
</tr>
|
64
|
+
|
65
|
+
<tr class="top-aligned-row">
|
66
|
+
<td><strong>Parent:</strong></td>
|
67
|
+
<td>
|
68
|
+
Object
|
69
|
+
</td>
|
70
|
+
</tr>
|
71
|
+
</table>
|
72
|
+
</div>
|
73
|
+
<!-- banner header -->
|
74
|
+
|
75
|
+
<div id="bodyContent">
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
<div id="contextContent">
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
</div>
|
84
|
+
|
85
|
+
<div id="method-list">
|
86
|
+
<h3 class="section-bar">Methods</h3>
|
87
|
+
|
88
|
+
<div class="name-list">
|
89
|
+
<a href="#M000026">exception_log</a>
|
90
|
+
<a href="#M000020">logfile</a>
|
91
|
+
<a href="#M000016">new</a>
|
92
|
+
<a href="#M000019">output_logfile</a>
|
93
|
+
<a href="#M000018">pidfile_dir</a>
|
94
|
+
<a href="#M000031">running?</a>
|
95
|
+
<a href="#M000017">script</a>
|
96
|
+
<a href="#M000030">show_status</a>
|
97
|
+
<a href="#M000025">start</a>
|
98
|
+
<a href="#M000022">start_exec</a>
|
99
|
+
<a href="#M000023">start_load</a>
|
100
|
+
<a href="#M000021">start_none</a>
|
101
|
+
<a href="#M000024">start_proc</a>
|
102
|
+
<a href="#M000027">stop</a>
|
103
|
+
<a href="#M000028">zap</a>
|
104
|
+
<a href="#M000029">zap!</a>
|
105
|
+
</div>
|
106
|
+
</div>
|
107
|
+
|
108
|
+
</div>
|
109
|
+
|
110
|
+
|
111
|
+
<!-- if includes -->
|
112
|
+
|
113
|
+
<div id="section">
|
114
|
+
|
115
|
+
|
116
|
+
<div id="constants-list">
|
117
|
+
<h3 class="section-bar">Constants</h3>
|
118
|
+
|
119
|
+
<div class="name-list">
|
120
|
+
<table summary="Constants">
|
121
|
+
<tr class="top-aligned-row context-row">
|
122
|
+
<td class="context-item-name">SIGNAL</td>
|
123
|
+
<td>=</td>
|
124
|
+
<td class="context-item-value">(RUBY_PLATFORM =~ /win32/ ? 'KILL' : 'TERM')</td>
|
125
|
+
</tr>
|
126
|
+
</table>
|
127
|
+
</div>
|
128
|
+
</div>
|
129
|
+
|
130
|
+
|
131
|
+
|
132
|
+
<div id="attribute-list">
|
133
|
+
<h3 class="section-bar">Attributes</h3>
|
134
|
+
|
135
|
+
<div class="name-list">
|
136
|
+
<table>
|
137
|
+
<tr class="top-aligned-row context-row">
|
138
|
+
<td class="context-item-name">app_argv</td>
|
139
|
+
<td class="context-item-value"> [RW] </td>
|
140
|
+
<td class="context-item-desc"></td>
|
141
|
+
</tr>
|
142
|
+
<tr class="top-aligned-row context-row">
|
143
|
+
<td class="context-item-name">controller_argv</td>
|
144
|
+
<td class="context-item-value"> [RW] </td>
|
145
|
+
<td class="context-item-desc"></td>
|
146
|
+
</tr>
|
147
|
+
<tr class="top-aligned-row context-row">
|
148
|
+
<td class="context-item-name">group</td>
|
149
|
+
<td class="context-item-value"> [R] </td>
|
150
|
+
<td class="context-item-desc">
|
151
|
+
the <a href="ApplicationGroup.html">ApplicationGroup</a> the application
|
152
|
+
belongs to
|
153
|
+
|
154
|
+
</td>
|
155
|
+
</tr>
|
156
|
+
<tr class="top-aligned-row context-row">
|
157
|
+
<td class="context-item-name">options</td>
|
158
|
+
<td class="context-item-value"> [R] </td>
|
159
|
+
<td class="context-item-desc">
|
160
|
+
my private options
|
161
|
+
|
162
|
+
</td>
|
163
|
+
</tr>
|
164
|
+
<tr class="top-aligned-row context-row">
|
165
|
+
<td class="context-item-name">pid</td>
|
166
|
+
<td class="context-item-value"> [R] </td>
|
167
|
+
<td class="context-item-desc">
|
168
|
+
the <a href="Pid.html">Pid</a> instance belonging to this application
|
169
|
+
|
170
|
+
</td>
|
171
|
+
</tr>
|
172
|
+
</table>
|
173
|
+
</div>
|
174
|
+
</div>
|
175
|
+
|
176
|
+
|
177
|
+
|
178
|
+
<!-- if method_list -->
|
179
|
+
<div id="methods">
|
180
|
+
<h3 class="section-bar">Public Class methods</h3>
|
181
|
+
|
182
|
+
<div id="method-M000016" class="method-detail">
|
183
|
+
<a name="M000016"></a>
|
184
|
+
|
185
|
+
<div class="method-heading">
|
186
|
+
<a href="#M000016" class="method-signature">
|
187
|
+
<span class="method-name">new</span><span class="method-args">(group, add_options = {}, pid = nil)</span>
|
188
|
+
</a>
|
189
|
+
</div>
|
190
|
+
|
191
|
+
<div class="method-description">
|
192
|
+
<p><a class="source-toggle" href="#"
|
193
|
+
onclick="toggleCode('M000016-source');return false;">[Source]</a></p>
|
194
|
+
<div class="method-source-code" id="M000016-source">
|
195
|
+
<pre>
|
196
|
+
<span class="ruby-comment cmt"># File lib/daemons/application.rb, line 25</span>
|
197
|
+
25: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">group</span>, <span class="ruby-identifier">add_options</span> = {}, <span class="ruby-identifier">pid</span> = <span class="ruby-keyword kw">nil</span>)
|
198
|
+
26: <span class="ruby-ivar">@group</span> = <span class="ruby-identifier">group</span>
|
199
|
+
27: <span class="ruby-ivar">@options</span> = <span class="ruby-identifier">group</span>.<span class="ruby-identifier">options</span>.<span class="ruby-identifier">dup</span>
|
200
|
+
28: <span class="ruby-ivar">@options</span>.<span class="ruby-identifier">update</span>(<span class="ruby-identifier">add_options</span>)
|
201
|
+
29:
|
202
|
+
30: <span class="ruby-ivar">@dir_mode</span> = <span class="ruby-ivar">@dir</span> = <span class="ruby-ivar">@script</span> = <span class="ruby-keyword kw">nil</span>
|
203
|
+
31:
|
204
|
+
32: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@pid</span> = <span class="ruby-identifier">pid</span>
|
205
|
+
33: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">dir</span> = <span class="ruby-identifier">pidfile_dir</span>
|
206
|
+
34: <span class="ruby-ivar">@pid</span> = <span class="ruby-constant">PidFile</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">dir</span>, <span class="ruby-ivar">@group</span>.<span class="ruby-identifier">app_name</span>, <span class="ruby-ivar">@group</span>.<span class="ruby-identifier">multiple</span>)
|
207
|
+
35: <span class="ruby-keyword kw">else</span>
|
208
|
+
36: <span class="ruby-ivar">@pid</span> = <span class="ruby-constant">PidMem</span>.<span class="ruby-identifier">new</span>
|
209
|
+
37: <span class="ruby-keyword kw">end</span>
|
210
|
+
38: <span class="ruby-keyword kw">end</span>
|
211
|
+
39: <span class="ruby-keyword kw">end</span>
|
212
|
+
</pre>
|
213
|
+
</div>
|
214
|
+
</div>
|
215
|
+
</div>
|
216
|
+
|
217
|
+
<h3 class="section-bar">Public Instance methods</h3>
|
218
|
+
|
219
|
+
<div id="method-M000026" class="method-detail">
|
220
|
+
<a name="M000026"></a>
|
221
|
+
|
222
|
+
<div class="method-heading">
|
223
|
+
<a href="#M000026" class="method-signature">
|
224
|
+
<span class="method-name">exception_log</span><span class="method-args">()</span>
|
225
|
+
</a>
|
226
|
+
</div>
|
227
|
+
|
228
|
+
<div class="method-description">
|
229
|
+
<p>
|
230
|
+
This is a nice little function for debugging purposes: In case a
|
231
|
+
multi-threaded ruby <a href="Application.html#M000017">script</a> exits due
|
232
|
+
to an uncaught exception it may be difficult to find out where the
|
233
|
+
exception came from because one cannot catch exceptions that are thrown in
|
234
|
+
threads other than the main thread.
|
235
|
+
</p>
|
236
|
+
<p>
|
237
|
+
This function searches for all exceptions in memory and outputs them to
|
238
|
+
STDERR (if it is connected) and to a log file in the pid-file directory.
|
239
|
+
</p>
|
240
|
+
<p><a class="source-toggle" href="#"
|
241
|
+
onclick="toggleCode('M000026-source');return false;">[Source]</a></p>
|
242
|
+
<div class="method-source-code" id="M000026-source">
|
243
|
+
<pre>
|
244
|
+
<span class="ruby-comment cmt"># File lib/daemons/application.rb, line 287</span>
|
245
|
+
287: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">exception_log</span>
|
246
|
+
288: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">logfile</span>
|
247
|
+
289:
|
248
|
+
290: <span class="ruby-identifier">require</span> <span class="ruby-value str">'logger'</span>
|
249
|
+
291:
|
250
|
+
292: <span class="ruby-identifier">l_file</span> = <span class="ruby-constant">Logger</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">logfile</span>)
|
251
|
+
293:
|
252
|
+
294: <span class="ruby-comment cmt"># the code below finds the last exception</span>
|
253
|
+
295: <span class="ruby-identifier">e</span> = <span class="ruby-keyword kw">nil</span>
|
254
|
+
296:
|
255
|
+
297: <span class="ruby-constant">ObjectSpace</span>.<span class="ruby-identifier">each_object</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">o</span><span class="ruby-operator">|</span>
|
256
|
+
298: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">::</span><span class="ruby-constant">Exception</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">o</span>
|
257
|
+
299: <span class="ruby-identifier">e</span> = <span class="ruby-identifier">o</span>
|
258
|
+
300: <span class="ruby-keyword kw">end</span>
|
259
|
+
301: }
|
260
|
+
302:
|
261
|
+
303: <span class="ruby-identifier">l_file</span>.<span class="ruby-identifier">info</span> <span class="ruby-value str">"*** below you find the most recent exception thrown, this will be likely (but not certainly) the exception that made the application exit abnormally ***"</span>
|
262
|
+
304: <span class="ruby-identifier">l_file</span>.<span class="ruby-identifier">error</span> <span class="ruby-identifier">e</span>
|
263
|
+
305:
|
264
|
+
306: <span class="ruby-identifier">l_file</span>.<span class="ruby-identifier">info</span> <span class="ruby-value str">"*** below you find all exception objects found in memory, some of them may have been thrown in your application, others may just be in memory because they are standard exceptions ***"</span>
|
265
|
+
307:
|
266
|
+
308: <span class="ruby-comment cmt"># this code logs every exception found in memory</span>
|
267
|
+
309: <span class="ruby-constant">ObjectSpace</span>.<span class="ruby-identifier">each_object</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">o</span><span class="ruby-operator">|</span>
|
268
|
+
310: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">::</span><span class="ruby-constant">Exception</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">o</span>
|
269
|
+
311: <span class="ruby-identifier">l_file</span>.<span class="ruby-identifier">error</span> <span class="ruby-identifier">o</span>
|
270
|
+
312: <span class="ruby-keyword kw">end</span>
|
271
|
+
313: }
|
272
|
+
314:
|
273
|
+
315: <span class="ruby-identifier">l_file</span>.<span class="ruby-identifier">close</span>
|
274
|
+
316: <span class="ruby-keyword kw">end</span>
|
275
|
+
</pre>
|
276
|
+
</div>
|
277
|
+
</div>
|
278
|
+
</div>
|
279
|
+
|
280
|
+
<div id="method-M000020" class="method-detail">
|
281
|
+
<a name="M000020"></a>
|
282
|
+
|
283
|
+
<div class="method-heading">
|
284
|
+
<a href="#M000020" class="method-signature">
|
285
|
+
<span class="method-name">logfile</span><span class="method-args">()</span>
|
286
|
+
</a>
|
287
|
+
</div>
|
288
|
+
|
289
|
+
<div class="method-description">
|
290
|
+
<p><a class="source-toggle" href="#"
|
291
|
+
onclick="toggleCode('M000020-source');return false;">[Source]</a></p>
|
292
|
+
<div class="method-source-code" id="M000020-source">
|
293
|
+
<pre>
|
294
|
+
<span class="ruby-comment cmt"># File lib/daemons/application.rb, line 54</span>
|
295
|
+
54: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">logfile</span>
|
296
|
+
55: <span class="ruby-identifier">logdir</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:dir_mode</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">:system</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'/var/log'</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">pidfile_dir</span>
|
297
|
+
56: <span class="ruby-identifier">logdir</span> <span class="ruby-value">? </span><span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">logdir</span>, <span class="ruby-ivar">@group</span>.<span class="ruby-identifier">app_name</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'.log'</span>) <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>
|
298
|
+
57: <span class="ruby-keyword kw">end</span>
|
299
|
+
</pre>
|
300
|
+
</div>
|
301
|
+
</div>
|
302
|
+
</div>
|
303
|
+
|
304
|
+
<div id="method-M000019" class="method-detail">
|
305
|
+
<a name="M000019"></a>
|
306
|
+
|
307
|
+
<div class="method-heading">
|
308
|
+
<a href="#M000019" class="method-signature">
|
309
|
+
<span class="method-name">output_logfile</span><span class="method-args">()</span>
|
310
|
+
</a>
|
311
|
+
</div>
|
312
|
+
|
313
|
+
<div class="method-description">
|
314
|
+
<p><a class="source-toggle" href="#"
|
315
|
+
onclick="toggleCode('M000019-source');return false;">[Source]</a></p>
|
316
|
+
<div class="method-source-code" id="M000019-source">
|
317
|
+
<pre>
|
318
|
+
<span class="ruby-comment cmt"># File lib/daemons/application.rb, line 49</span>
|
319
|
+
49: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">output_logfile</span>
|
320
|
+
50: <span class="ruby-identifier">logdir</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:dir_mode</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">:system</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'/var/log'</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">pidfile_dir</span>
|
321
|
+
51: (<span class="ruby-identifier">options</span>[<span class="ruby-identifier">:log_output</span>] <span class="ruby-operator">&&</span> <span class="ruby-identifier">logdir</span>) <span class="ruby-operator">?</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">logdir</span>, <span class="ruby-ivar">@group</span>.<span class="ruby-identifier">app_name</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'.output'</span>) <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>
|
322
|
+
52: <span class="ruby-keyword kw">end</span>
|
323
|
+
</pre>
|
324
|
+
</div>
|
325
|
+
</div>
|
326
|
+
</div>
|
327
|
+
|
328
|
+
<div id="method-M000018" class="method-detail">
|
329
|
+
<a name="M000018"></a>
|
330
|
+
|
331
|
+
<div class="method-heading">
|
332
|
+
<a href="#M000018" class="method-signature">
|
333
|
+
<span class="method-name">pidfile_dir</span><span class="method-args">()</span>
|
334
|
+
</a>
|
335
|
+
</div>
|
336
|
+
|
337
|
+
<div class="method-description">
|
338
|
+
<p><a class="source-toggle" href="#"
|
339
|
+
onclick="toggleCode('M000018-source');return false;">[Source]</a></p>
|
340
|
+
<div class="method-source-code" id="M000018-source">
|
341
|
+
<pre>
|
342
|
+
<span class="ruby-comment cmt"># File lib/daemons/application.rb, line 45</span>
|
343
|
+
45: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pidfile_dir</span>
|
344
|
+
46: <span class="ruby-constant">Pid</span>.<span class="ruby-identifier">dir</span>(<span class="ruby-ivar">@dir_mode</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@group</span>.<span class="ruby-identifier">dir_mode</span>, <span class="ruby-ivar">@dir</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@group</span>.<span class="ruby-identifier">dir</span>, <span class="ruby-ivar">@script</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@group</span>.<span class="ruby-identifier">script</span>)
|
345
|
+
47: <span class="ruby-keyword kw">end</span>
|
346
|
+
</pre>
|
347
|
+
</div>
|
348
|
+
</div>
|
349
|
+
</div>
|
350
|
+
|
351
|
+
<div id="method-M000031" class="method-detail">
|
352
|
+
<a name="M000031"></a>
|
353
|
+
|
354
|
+
<div class="method-heading">
|
355
|
+
<a href="#M000031" class="method-signature">
|
356
|
+
<span class="method-name">running?</span><span class="method-args">()</span>
|
357
|
+
</a>
|
358
|
+
</div>
|
359
|
+
|
360
|
+
<div class="method-description">
|
361
|
+
<p>
|
362
|
+
This function implements a (probably too simle) method to detect whether
|
363
|
+
the program with the pid found in the pid-file is still running. It just
|
364
|
+
searches for the pid in the output of <tt>ps ax</tt>, which is probably not
|
365
|
+
a good idea in some cases. Alternatives would be to use a direct access
|
366
|
+
method the unix process control system.
|
367
|
+
</p>
|
368
|
+
<p><a class="source-toggle" href="#"
|
369
|
+
onclick="toggleCode('M000031-source');return false;">[Source]</a></p>
|
370
|
+
<div class="method-source-code" id="M000031-source">
|
371
|
+
<pre>
|
372
|
+
<span class="ruby-comment cmt"># File lib/daemons/application.rb, line 367</span>
|
373
|
+
367: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">running?</span>
|
374
|
+
368: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@pid</span>.<span class="ruby-identifier">exist?</span>
|
375
|
+
369: <span class="ruby-keyword kw">return</span> <span class="ruby-constant">Pid</span>.<span class="ruby-identifier">running?</span>(<span class="ruby-ivar">@pid</span>.<span class="ruby-identifier">pid</span>)
|
376
|
+
370: <span class="ruby-keyword kw">end</span>
|
377
|
+
371:
|
378
|
+
372: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
|
379
|
+
373: <span class="ruby-keyword kw">end</span>
|
380
|
+
</pre>
|
381
|
+
</div>
|
382
|
+
</div>
|
383
|
+
</div>
|
384
|
+
|
385
|
+
<div id="method-M000017" class="method-detail">
|
386
|
+
<a name="M000017"></a>
|
387
|
+
|
388
|
+
<div class="method-heading">
|
389
|
+
<a href="#M000017" class="method-signature">
|
390
|
+
<span class="method-name">script</span><span class="method-args">()</span>
|
391
|
+
</a>
|
392
|
+
</div>
|
393
|
+
|
394
|
+
<div class="method-description">
|
395
|
+
<p><a class="source-toggle" href="#"
|
396
|
+
onclick="toggleCode('M000017-source');return false;">[Source]</a></p>
|
397
|
+
<div class="method-source-code" id="M000017-source">
|
398
|
+
<pre>
|
399
|
+
<span class="ruby-comment cmt"># File lib/daemons/application.rb, line 41</span>
|
400
|
+
41: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">script</span>
|
401
|
+
42: <span class="ruby-ivar">@script</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@group</span>.<span class="ruby-identifier">script</span>
|
402
|
+
43: <span class="ruby-keyword kw">end</span>
|
403
|
+
</pre>
|
404
|
+
</div>
|
405
|
+
</div>
|
406
|
+
</div>
|
407
|
+
|
408
|
+
<div id="method-M000030" class="method-detail">
|
409
|
+
<a name="M000030"></a>
|
410
|
+
|
411
|
+
<div class="method-heading">
|
412
|
+
<a href="#M000030" class="method-signature">
|
413
|
+
<span class="method-name">show_status</span><span class="method-args">()</span>
|
414
|
+
</a>
|
415
|
+
</div>
|
416
|
+
|
417
|
+
<div class="method-description">
|
418
|
+
<p><a class="source-toggle" href="#"
|
419
|
+
onclick="toggleCode('M000030-source');return false;">[Source]</a></p>
|
420
|
+
<div class="method-source-code" id="M000030-source">
|
421
|
+
<pre>
|
422
|
+
<span class="ruby-comment cmt"># File lib/daemons/application.rb, line 354</span>
|
423
|
+
354: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">show_status</span>
|
424
|
+
355: <span class="ruby-identifier">running</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">running?</span>
|
425
|
+
356:
|
426
|
+
357: <span class="ruby-identifier">puts</span> <span class="ruby-node">"#{self.group.app_name}: #{running ? '' : 'not '}running#{(running and @pid.exist?) ? ' [pid ' + @pid.pid.to_s + ']' : ''}#{(@pid.exist? and not running) ? ' (but pid-file exists: ' + @pid.pid.to_s + ')' : ''}"</span>
|
427
|
+
358: <span class="ruby-keyword kw">end</span>
|
428
|
+
</pre>
|
429
|
+
</div>
|
430
|
+
</div>
|
431
|
+
</div>
|
432
|
+
|
433
|
+
<div id="method-M000025" class="method-detail">
|
434
|
+
<a name="M000025"></a>
|
435
|
+
|
436
|
+
<div class="method-heading">
|
437
|
+
<a href="#M000025" class="method-signature">
|
438
|
+
<span class="method-name">start</span><span class="method-args">()</span>
|
439
|
+
</a>
|
440
|
+
</div>
|
441
|
+
|
442
|
+
<div class="method-description">
|
443
|
+
<p><a class="source-toggle" href="#"
|
444
|
+
onclick="toggleCode('M000025-source');return false;">[Source]</a></p>
|
445
|
+
<div class="method-source-code" id="M000025-source">
|
446
|
+
<pre>
|
447
|
+
<span class="ruby-comment cmt"># File lib/daemons/application.rb, line 243</span>
|
448
|
+
243: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">start</span>
|
449
|
+
244: <span class="ruby-ivar">@group</span>.<span class="ruby-identifier">create_monitor</span>(<span class="ruby-ivar">@group</span>.<span class="ruby-identifier">applications</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">||</span> <span class="ruby-keyword kw">self</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:ontop</span>] <span class="ruby-comment cmt"># we don't monitor applications in the foreground</span>
|
450
|
+
245:
|
451
|
+
246: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:mode</span>]
|
452
|
+
247: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:none</span>
|
453
|
+
248: <span class="ruby-comment cmt"># this is only used to daemonize the currently running process</span>
|
454
|
+
249: <span class="ruby-identifier">start_none</span>
|
455
|
+
250: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:exec</span>
|
456
|
+
251: <span class="ruby-identifier">start_exec</span>
|
457
|
+
252: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:load</span>
|
458
|
+
253: <span class="ruby-identifier">start_load</span>
|
459
|
+
254: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:proc</span>
|
460
|
+
255: <span class="ruby-identifier">start_proc</span>
|
461
|
+
256: <span class="ruby-keyword kw">else</span>
|
462
|
+
257: <span class="ruby-identifier">start_load</span>
|
463
|
+
258: <span class="ruby-keyword kw">end</span>
|
464
|
+
259: <span class="ruby-keyword kw">end</span>
|
465
|
+
</pre>
|
466
|
+
</div>
|
467
|
+
</div>
|
468
|
+
</div>
|
469
|
+
|
470
|
+
<div id="method-M000022" class="method-detail">
|
471
|
+
<a name="M000022"></a>
|
472
|
+
|
473
|
+
<div class="method-heading">
|
474
|
+
<a href="#M000022" class="method-signature">
|
475
|
+
<span class="method-name">start_exec</span><span class="method-args">()</span>
|
476
|
+
</a>
|
477
|
+
</div>
|
478
|
+
|
479
|
+
<div class="method-description">
|
480
|
+
<p><a class="source-toggle" href="#"
|
481
|
+
onclick="toggleCode('M000022-source');return false;">[Source]</a></p>
|
482
|
+
<div class="method-source-code" id="M000022-source">
|
483
|
+
<pre>
|
484
|
+
<span class="ruby-comment cmt"># File lib/daemons/application.rb, line 103</span>
|
485
|
+
103: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">start_exec</span>
|
486
|
+
104: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:backtrace</span>]
|
487
|
+
105: <span class="ruby-identifier">puts</span> <span class="ruby-value str">"option :backtrace is not supported with :mode => :exec, ignoring"</span>
|
488
|
+
106: <span class="ruby-keyword kw">end</span>
|
489
|
+
107:
|
490
|
+
108: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:ontop</span>]
|
491
|
+
109: <span class="ruby-constant">Daemonize</span>.<span class="ruby-identifier">daemonize</span>(<span class="ruby-identifier">output_logfile</span>, <span class="ruby-ivar">@group</span>.<span class="ruby-identifier">app_name</span>)
|
492
|
+
110: <span class="ruby-keyword kw">else</span>
|
493
|
+
111: <span class="ruby-constant">Daemonize</span>.<span class="ruby-identifier">simulate</span>(<span class="ruby-identifier">output_logfile</span>)
|
494
|
+
112: <span class="ruby-keyword kw">end</span>
|
495
|
+
113:
|
496
|
+
114: <span class="ruby-comment cmt"># note that we cannot remove the pid file if we run in :ontop mode (i.e. 'ruby ctrl_exec.rb run')</span>
|
497
|
+
115: <span class="ruby-ivar">@pid</span>.<span class="ruby-identifier">pid</span> = <span class="ruby-constant">Process</span>.<span class="ruby-identifier">pid</span>
|
498
|
+
116:
|
499
|
+
117: <span class="ruby-constant">ENV</span>[<span class="ruby-value str">'DAEMONS_ARGV'</span>] = <span class="ruby-ivar">@controller_argv</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">' '</span>)
|
500
|
+
118: <span class="ruby-comment cmt"># haven't tested yet if this is really passed to the exec'd process...</span>
|
501
|
+
119:
|
502
|
+
120:
|
503
|
+
121:
|
504
|
+
122: <span class="ruby-constant">Kernel</span>.<span class="ruby-identifier">exec</span>(<span class="ruby-identifier">script</span>(), <span class="ruby-operator">*</span>(<span class="ruby-ivar">@app_argv</span> <span class="ruby-operator">||</span> []))
|
505
|
+
123: <span class="ruby-comment cmt">#Kernel.exec(script(), *ARGV)</span>
|
506
|
+
124: <span class="ruby-keyword kw">end</span>
|
507
|
+
</pre>
|
508
|
+
</div>
|
509
|
+
</div>
|
510
|
+
</div>
|
511
|
+
|
512
|
+
<div id="method-M000023" class="method-detail">
|
513
|
+
<a name="M000023"></a>
|
514
|
+
|
515
|
+
<div class="method-heading">
|
516
|
+
<a href="#M000023" class="method-signature">
|
517
|
+
<span class="method-name">start_load</span><span class="method-args">()</span>
|
518
|
+
</a>
|
519
|
+
</div>
|
520
|
+
|
521
|
+
<div class="method-description">
|
522
|
+
<p><a class="source-toggle" href="#"
|
523
|
+
onclick="toggleCode('M000023-source');return false;">[Source]</a></p>
|
524
|
+
<div class="method-source-code" id="M000023-source">
|
525
|
+
<pre>
|
526
|
+
<span class="ruby-comment cmt"># File lib/daemons/application.rb, line 126</span>
|
527
|
+
126: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">start_load</span>
|
528
|
+
127: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:ontop</span>]
|
529
|
+
128: <span class="ruby-constant">Daemonize</span>.<span class="ruby-identifier">daemonize</span>(<span class="ruby-identifier">output_logfile</span>, <span class="ruby-ivar">@group</span>.<span class="ruby-identifier">app_name</span>)
|
530
|
+
129: <span class="ruby-keyword kw">else</span>
|
531
|
+
130: <span class="ruby-constant">Daemonize</span>.<span class="ruby-identifier">simulate</span>(<span class="ruby-identifier">output_logfile</span>)
|
532
|
+
131: <span class="ruby-keyword kw">end</span>
|
533
|
+
132:
|
534
|
+
133: <span class="ruby-ivar">@pid</span>.<span class="ruby-identifier">pid</span> = <span class="ruby-constant">Process</span>.<span class="ruby-identifier">pid</span>
|
535
|
+
134:
|
536
|
+
135:
|
537
|
+
136: <span class="ruby-comment cmt"># We need this to remove the pid-file if the applications exits by itself.</span>
|
538
|
+
137: <span class="ruby-comment cmt"># Note that <tt>at_text</tt> will only be run if the applications exits by calling </span>
|
539
|
+
138: <span class="ruby-comment cmt"># <tt>exit</tt>, and not if it calls <tt>exit!</tt> (so please don't call <tt>exit!</tt></span>
|
540
|
+
139: <span class="ruby-comment cmt"># in your application!</span>
|
541
|
+
140: <span class="ruby-comment cmt">#</span>
|
542
|
+
141: <span class="ruby-identifier">at_exit</span> {
|
543
|
+
142: <span class="ruby-keyword kw">begin</span>; <span class="ruby-ivar">@pid</span>.<span class="ruby-identifier">cleanup</span>; <span class="ruby-keyword kw">rescue</span> <span class="ruby-operator">::</span><span class="ruby-constant">Exception</span>; <span class="ruby-keyword kw">end</span>
|
544
|
+
143:
|
545
|
+
144: <span class="ruby-comment cmt"># If the option <tt>:backtrace</tt> is used and the application did exit by itself</span>
|
546
|
+
145: <span class="ruby-comment cmt"># create a exception log.</span>
|
547
|
+
146: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:backtrace</span>] <span class="ruby-keyword kw">and</span> <span class="ruby-keyword kw">not</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:ontop</span>] <span class="ruby-keyword kw">and</span> <span class="ruby-keyword kw">not</span> <span class="ruby-identifier">$daemons_sigterm</span>
|
548
|
+
147: <span class="ruby-keyword kw">begin</span>; <span class="ruby-identifier">exception_log</span>(); <span class="ruby-keyword kw">rescue</span> <span class="ruby-operator">::</span><span class="ruby-constant">Exception</span>; <span class="ruby-keyword kw">end</span>
|
549
|
+
148: <span class="ruby-keyword kw">end</span>
|
550
|
+
149:
|
551
|
+
150: }
|
552
|
+
151:
|
553
|
+
152: <span class="ruby-comment cmt"># This part is needed to remove the pid-file if the application is killed by </span>
|
554
|
+
153: <span class="ruby-comment cmt"># daemons or manually by the user.</span>
|
555
|
+
154: <span class="ruby-comment cmt"># Note that the applications is not supposed to overwrite the signal handler for</span>
|
556
|
+
155: <span class="ruby-comment cmt"># 'TERM'.</span>
|
557
|
+
156: <span class="ruby-comment cmt">#</span>
|
558
|
+
157: <span class="ruby-identifier">trap</span>(<span class="ruby-constant">SIGNAL</span>) {
|
559
|
+
158: <span class="ruby-keyword kw">begin</span>; <span class="ruby-ivar">@pid</span>.<span class="ruby-identifier">cleanup</span>; <span class="ruby-keyword kw">rescue</span> <span class="ruby-operator">::</span><span class="ruby-constant">Exception</span>; <span class="ruby-keyword kw">end</span>
|
560
|
+
159: <span class="ruby-identifier">$daemons_sigterm</span> = <span class="ruby-keyword kw">true</span>
|
561
|
+
160:
|
562
|
+
161: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:hard_exit</span>]
|
563
|
+
162: <span class="ruby-identifier">exit!</span>
|
564
|
+
163: <span class="ruby-keyword kw">else</span>
|
565
|
+
164: <span class="ruby-identifier">exit</span>
|
566
|
+
165: <span class="ruby-keyword kw">end</span>
|
567
|
+
166: }
|
568
|
+
167:
|
569
|
+
168: <span class="ruby-comment cmt"># Now we really start the script...</span>
|
570
|
+
169: <span class="ruby-identifier">$DAEMONS_ARGV</span> = <span class="ruby-ivar">@controller_argv</span>
|
571
|
+
170: <span class="ruby-constant">ENV</span>[<span class="ruby-value str">'DAEMONS_ARGV'</span>] = <span class="ruby-ivar">@controller_argv</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">' '</span>)
|
572
|
+
171:
|
573
|
+
172: <span class="ruby-constant">ARGV</span>.<span class="ruby-identifier">clear</span>
|
574
|
+
173: <span class="ruby-constant">ARGV</span>.<span class="ruby-identifier">concat</span> <span class="ruby-ivar">@app_argv</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@app_argv</span>
|
575
|
+
174:
|
576
|
+
175: <span class="ruby-comment cmt"># TODO: begin - rescue - end around this and exception logging</span>
|
577
|
+
176: <span class="ruby-identifier">load</span> <span class="ruby-identifier">script</span>()
|
578
|
+
177: <span class="ruby-keyword kw">end</span>
|
579
|
+
</pre>
|
580
|
+
</div>
|
581
|
+
</div>
|
582
|
+
</div>
|
583
|
+
|
584
|
+
<div id="method-M000021" class="method-detail">
|
585
|
+
<a name="M000021"></a>
|
586
|
+
|
587
|
+
<div class="method-heading">
|
588
|
+
<a href="#M000021" class="method-signature">
|
589
|
+
<span class="method-name">start_none</span><span class="method-args">()</span>
|
590
|
+
</a>
|
591
|
+
</div>
|
592
|
+
|
593
|
+
<div class="method-description">
|
594
|
+
<p>
|
595
|
+
this function is only used to daemonize the currently running process (<a
|
596
|
+
href="../Daemons.html#M000004">Daemons.daemonize</a>)
|
597
|
+
</p>
|
598
|
+
<p><a class="source-toggle" href="#"
|
599
|
+
onclick="toggleCode('M000021-source');return false;">[Source]</a></p>
|
600
|
+
<div class="method-source-code" id="M000021-source">
|
601
|
+
<pre>
|
602
|
+
<span class="ruby-comment cmt"># File lib/daemons/application.rb, line 60</span>
|
603
|
+
60: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">start_none</span>
|
604
|
+
61: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:ontop</span>]
|
605
|
+
62: <span class="ruby-constant">Daemonize</span>.<span class="ruby-identifier">daemonize</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@group</span>.<span class="ruby-identifier">app_name</span>) <span class="ruby-comment cmt">#(logfile)</span>
|
606
|
+
63: <span class="ruby-keyword kw">else</span>
|
607
|
+
64: <span class="ruby-constant">Daemonize</span>.<span class="ruby-identifier">simulate</span>
|
608
|
+
65: <span class="ruby-keyword kw">end</span>
|
609
|
+
66:
|
610
|
+
67: <span class="ruby-ivar">@pid</span>.<span class="ruby-identifier">pid</span> = <span class="ruby-constant">Process</span>.<span class="ruby-identifier">pid</span>
|
611
|
+
68:
|
612
|
+
69:
|
613
|
+
70: <span class="ruby-comment cmt"># We need this to remove the pid-file if the applications exits by itself.</span>
|
614
|
+
71: <span class="ruby-comment cmt"># Note that <tt>at_text</tt> will only be run if the applications exits by calling </span>
|
615
|
+
72: <span class="ruby-comment cmt"># <tt>exit</tt>, and not if it calls <tt>exit!</tt> (so please don't call <tt>exit!</tt></span>
|
616
|
+
73: <span class="ruby-comment cmt"># in your application!</span>
|
617
|
+
74: <span class="ruby-comment cmt">#</span>
|
618
|
+
75: <span class="ruby-identifier">at_exit</span> {
|
619
|
+
76: <span class="ruby-keyword kw">begin</span>; <span class="ruby-ivar">@pid</span>.<span class="ruby-identifier">cleanup</span>; <span class="ruby-keyword kw">rescue</span> <span class="ruby-operator">::</span><span class="ruby-constant">Exception</span>; <span class="ruby-keyword kw">end</span>
|
620
|
+
77:
|
621
|
+
78: <span class="ruby-comment cmt"># If the option <tt>:backtrace</tt> is used and the application did exit by itself</span>
|
622
|
+
79: <span class="ruby-comment cmt"># create a exception log.</span>
|
623
|
+
80: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:backtrace</span>] <span class="ruby-keyword kw">and</span> <span class="ruby-keyword kw">not</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:ontop</span>] <span class="ruby-keyword kw">and</span> <span class="ruby-keyword kw">not</span> <span class="ruby-identifier">$daemons_sigterm</span>
|
624
|
+
81: <span class="ruby-keyword kw">begin</span>; <span class="ruby-identifier">exception_log</span>(); <span class="ruby-keyword kw">rescue</span> <span class="ruby-operator">::</span><span class="ruby-constant">Exception</span>; <span class="ruby-keyword kw">end</span>
|
625
|
+
82: <span class="ruby-keyword kw">end</span>
|
626
|
+
83:
|
627
|
+
84: }
|
628
|
+
85:
|
629
|
+
86: <span class="ruby-comment cmt"># This part is needed to remove the pid-file if the application is killed by </span>
|
630
|
+
87: <span class="ruby-comment cmt"># daemons or manually by the user.</span>
|
631
|
+
88: <span class="ruby-comment cmt"># Note that the applications is not supposed to overwrite the signal handler for</span>
|
632
|
+
89: <span class="ruby-comment cmt"># 'TERM'.</span>
|
633
|
+
90: <span class="ruby-comment cmt">#</span>
|
634
|
+
91: <span class="ruby-identifier">trap</span>(<span class="ruby-constant">SIGNAL</span>) {
|
635
|
+
92: <span class="ruby-keyword kw">begin</span>; <span class="ruby-ivar">@pid</span>.<span class="ruby-identifier">cleanup</span>; <span class="ruby-keyword kw">rescue</span> <span class="ruby-operator">::</span><span class="ruby-constant">Exception</span>; <span class="ruby-keyword kw">end</span>
|
636
|
+
93: <span class="ruby-identifier">$daemons_sigterm</span> = <span class="ruby-keyword kw">true</span>
|
637
|
+
94:
|
638
|
+
95: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:hard_exit</span>]
|
639
|
+
96: <span class="ruby-identifier">exit!</span>
|
640
|
+
97: <span class="ruby-keyword kw">else</span>
|
641
|
+
98: <span class="ruby-identifier">exit</span>
|
642
|
+
99: <span class="ruby-keyword kw">end</span>
|
643
|
+
100: }
|
644
|
+
101: <span class="ruby-keyword kw">end</span>
|
645
|
+
</pre>
|
646
|
+
</div>
|
647
|
+
</div>
|
648
|
+
</div>
|
649
|
+
|
650
|
+
<div id="method-M000024" class="method-detail">
|
651
|
+
<a name="M000024"></a>
|
652
|
+
|
653
|
+
<div class="method-heading">
|
654
|
+
<a href="#M000024" class="method-signature">
|
655
|
+
<span class="method-name">start_proc</span><span class="method-args">()</span>
|
656
|
+
</a>
|
657
|
+
</div>
|
658
|
+
|
659
|
+
<div class="method-description">
|
660
|
+
<p><a class="source-toggle" href="#"
|
661
|
+
onclick="toggleCode('M000024-source');return false;">[Source]</a></p>
|
662
|
+
<div class="method-source-code" id="M000024-source">
|
663
|
+
<pre>
|
664
|
+
<span class="ruby-comment cmt"># File lib/daemons/application.rb, line 179</span>
|
665
|
+
179: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">start_proc</span>
|
666
|
+
180: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">p</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:proc</span>]
|
667
|
+
181:
|
668
|
+
182: <span class="ruby-identifier">myproc</span> = <span class="ruby-identifier">proc</span> <span class="ruby-keyword kw">do</span>
|
669
|
+
183: <span class="ruby-comment cmt"># We need this to remove the pid-file if the applications exits by itself.</span>
|
670
|
+
184: <span class="ruby-comment cmt"># Note that <tt>at_text</tt> will only be run if the applications exits by calling </span>
|
671
|
+
185: <span class="ruby-comment cmt"># <tt>exit</tt>, and not if it calls <tt>exit!</tt> (so please don't call <tt>exit!</tt></span>
|
672
|
+
186: <span class="ruby-comment cmt"># in your application!</span>
|
673
|
+
187: <span class="ruby-comment cmt">#</span>
|
674
|
+
188: <span class="ruby-identifier">at_exit</span> {
|
675
|
+
189: <span class="ruby-keyword kw">begin</span>; <span class="ruby-ivar">@pid</span>.<span class="ruby-identifier">cleanup</span>; <span class="ruby-keyword kw">rescue</span> <span class="ruby-operator">::</span><span class="ruby-constant">Exception</span>; <span class="ruby-keyword kw">end</span>
|
676
|
+
190:
|
677
|
+
191: <span class="ruby-comment cmt"># If the option <tt>:backtrace</tt> is used and the application did exit by itself</span>
|
678
|
+
192: <span class="ruby-comment cmt"># create a exception log.</span>
|
679
|
+
193: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:backtrace</span>] <span class="ruby-keyword kw">and</span> <span class="ruby-keyword kw">not</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:ontop</span>] <span class="ruby-keyword kw">and</span> <span class="ruby-keyword kw">not</span> <span class="ruby-identifier">$daemons_sigterm</span>
|
680
|
+
194: <span class="ruby-keyword kw">begin</span>; <span class="ruby-identifier">exception_log</span>(); <span class="ruby-keyword kw">rescue</span> <span class="ruby-operator">::</span><span class="ruby-constant">Exception</span>; <span class="ruby-keyword kw">end</span>
|
681
|
+
195: <span class="ruby-keyword kw">end</span>
|
682
|
+
196:
|
683
|
+
197: }
|
684
|
+
198:
|
685
|
+
199: <span class="ruby-comment cmt"># This part is needed to remove the pid-file if the application is killed by </span>
|
686
|
+
200: <span class="ruby-comment cmt"># daemons or manually by the user.</span>
|
687
|
+
201: <span class="ruby-comment cmt"># Note that the applications is not supposed to overwrite the signal handler for</span>
|
688
|
+
202: <span class="ruby-comment cmt"># 'TERM'.</span>
|
689
|
+
203: <span class="ruby-comment cmt">#</span>
|
690
|
+
204: <span class="ruby-identifier">trap</span>(<span class="ruby-constant">SIGNAL</span>) {
|
691
|
+
205: <span class="ruby-keyword kw">begin</span>; <span class="ruby-ivar">@pid</span>.<span class="ruby-identifier">cleanup</span>; <span class="ruby-keyword kw">rescue</span> <span class="ruby-operator">::</span><span class="ruby-constant">Exception</span>; <span class="ruby-keyword kw">end</span>
|
692
|
+
206: <span class="ruby-identifier">$daemons_sigterm</span> = <span class="ruby-keyword kw">true</span>
|
693
|
+
207:
|
694
|
+
208: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:hard_exit</span>]
|
695
|
+
209: <span class="ruby-identifier">exit!</span>
|
696
|
+
210: <span class="ruby-keyword kw">else</span>
|
697
|
+
211: <span class="ruby-identifier">exit</span>
|
698
|
+
212: <span class="ruby-keyword kw">end</span>
|
699
|
+
213: }
|
700
|
+
214:
|
701
|
+
215: <span class="ruby-identifier">p</span>.<span class="ruby-identifier">call</span>()
|
702
|
+
216: <span class="ruby-keyword kw">end</span>
|
703
|
+
217:
|
704
|
+
218: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:ontop</span>]
|
705
|
+
219: <span class="ruby-ivar">@pid</span>.<span class="ruby-identifier">pid</span> = <span class="ruby-constant">Daemonize</span>.<span class="ruby-identifier">call_as_daemon</span>(<span class="ruby-identifier">myproc</span>, <span class="ruby-identifier">output_logfile</span>, <span class="ruby-ivar">@group</span>.<span class="ruby-identifier">app_name</span>)
|
706
|
+
220: <span class="ruby-keyword kw">else</span>
|
707
|
+
221: <span class="ruby-constant">Daemonize</span>.<span class="ruby-identifier">simulate</span>(<span class="ruby-identifier">output_logfile</span>)
|
708
|
+
222:
|
709
|
+
223: <span class="ruby-ivar">@pid</span>.<span class="ruby-identifier">pid</span> = <span class="ruby-constant">Process</span>.<span class="ruby-identifier">pid</span>
|
710
|
+
224:
|
711
|
+
225: <span class="ruby-identifier">myproc</span>.<span class="ruby-identifier">call</span>
|
712
|
+
226:
|
713
|
+
227: <span class="ruby-comment cmt"># why did we use this??</span>
|
714
|
+
228: <span class="ruby-comment cmt"># Thread.new(&options[:proc])</span>
|
715
|
+
229:
|
716
|
+
230: <span class="ruby-comment cmt"># why did we use the code below??</span>
|
717
|
+
231: <span class="ruby-comment cmt"># unless pid = Process.fork</span>
|
718
|
+
232: <span class="ruby-comment cmt"># @pid.pid = pid</span>
|
719
|
+
233: <span class="ruby-comment cmt"># Daemonize.simulate(logfile)</span>
|
720
|
+
234: <span class="ruby-comment cmt"># options[:proc].call</span>
|
721
|
+
235: <span class="ruby-comment cmt"># exit</span>
|
722
|
+
236: <span class="ruby-comment cmt"># else</span>
|
723
|
+
237: <span class="ruby-comment cmt"># Process.detach(@pid.pid)</span>
|
724
|
+
238: <span class="ruby-comment cmt"># end</span>
|
725
|
+
239: <span class="ruby-keyword kw">end</span>
|
726
|
+
240: <span class="ruby-keyword kw">end</span>
|
727
|
+
</pre>
|
728
|
+
</div>
|
729
|
+
</div>
|
730
|
+
</div>
|
731
|
+
|
732
|
+
<div id="method-M000027" class="method-detail">
|
733
|
+
<a name="M000027"></a>
|
734
|
+
|
735
|
+
<div class="method-heading">
|
736
|
+
<a href="#M000027" class="method-signature">
|
737
|
+
<span class="method-name">stop</span><span class="method-args">()</span>
|
738
|
+
</a>
|
739
|
+
</div>
|
740
|
+
|
741
|
+
<div class="method-description">
|
742
|
+
<p><a class="source-toggle" href="#"
|
743
|
+
onclick="toggleCode('M000027-source');return false;">[Source]</a></p>
|
744
|
+
<div class="method-source-code" id="M000027-source">
|
745
|
+
<pre>
|
746
|
+
<span class="ruby-comment cmt"># File lib/daemons/application.rb, line 319</span>
|
747
|
+
319: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">stop</span>
|
748
|
+
320: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:force</span>] <span class="ruby-keyword kw">and</span> <span class="ruby-keyword kw">not</span> <span class="ruby-identifier">running?</span>
|
749
|
+
321: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">zap</span>
|
750
|
+
322: <span class="ruby-keyword kw">return</span>
|
751
|
+
323: <span class="ruby-keyword kw">end</span>
|
752
|
+
324:
|
753
|
+
325: <span class="ruby-comment cmt"># Catch errors when trying to kill a process that doesn't</span>
|
754
|
+
326: <span class="ruby-comment cmt"># exist. This happens when the process quits and hasn't been</span>
|
755
|
+
327: <span class="ruby-comment cmt"># restarted by the monitor yet. By catching the error, we allow the</span>
|
756
|
+
328: <span class="ruby-comment cmt"># pid file clean-up to occur.</span>
|
757
|
+
329: <span class="ruby-identifier">pid</span> = <span class="ruby-ivar">@pid</span>.<span class="ruby-identifier">pid</span>
|
758
|
+
330: <span class="ruby-keyword kw">begin</span>
|
759
|
+
331: <span class="ruby-constant">Process</span>.<span class="ruby-identifier">kill</span>(<span class="ruby-constant">SIGNAL</span>, <span class="ruby-identifier">pid</span>)
|
760
|
+
332: <span class="ruby-keyword kw">while</span> <span class="ruby-constant">Pid</span>.<span class="ruby-identifier">running?</span>(<span class="ruby-identifier">pid</span>)
|
761
|
+
333: <span class="ruby-identifier">sleep</span> <span class="ruby-value">0</span><span class="ruby-value">.1</span>
|
762
|
+
334: <span class="ruby-keyword kw">end</span>
|
763
|
+
335: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Errno</span><span class="ruby-operator">::</span><span class="ruby-constant">ESRCH</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">e</span>
|
764
|
+
336: <span class="ruby-identifier">puts</span> <span class="ruby-node">"#{e} #{@pid.pid}"</span>
|
765
|
+
337: <span class="ruby-identifier">puts</span> <span class="ruby-value str">"deleting pid-file."</span>
|
766
|
+
338: <span class="ruby-keyword kw">end</span>
|
767
|
+
339:
|
768
|
+
340: <span class="ruby-comment cmt"># We try to remove the pid-files by ourselves, in case the application</span>
|
769
|
+
341: <span class="ruby-comment cmt"># didn't clean it up.</span>
|
770
|
+
342: <span class="ruby-keyword kw">begin</span>; <span class="ruby-ivar">@pid</span>.<span class="ruby-identifier">cleanup</span>; <span class="ruby-keyword kw">rescue</span> <span class="ruby-operator">::</span><span class="ruby-constant">Exception</span>; <span class="ruby-keyword kw">end</span>
|
771
|
+
343:
|
772
|
+
344: <span class="ruby-keyword kw">end</span>
|
773
|
+
</pre>
|
774
|
+
</div>
|
775
|
+
</div>
|
776
|
+
</div>
|
777
|
+
|
778
|
+
<div id="method-M000028" class="method-detail">
|
779
|
+
<a name="M000028"></a>
|
780
|
+
|
781
|
+
<div class="method-heading">
|
782
|
+
<a href="#M000028" class="method-signature">
|
783
|
+
<span class="method-name">zap</span><span class="method-args">()</span>
|
784
|
+
</a>
|
785
|
+
</div>
|
786
|
+
|
787
|
+
<div class="method-description">
|
788
|
+
<p><a class="source-toggle" href="#"
|
789
|
+
onclick="toggleCode('M000028-source');return false;">[Source]</a></p>
|
790
|
+
<div class="method-source-code" id="M000028-source">
|
791
|
+
<pre>
|
792
|
+
<span class="ruby-comment cmt"># File lib/daemons/application.rb, line 346</span>
|
793
|
+
346: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">zap</span>
|
794
|
+
347: <span class="ruby-ivar">@pid</span>.<span class="ruby-identifier">cleanup</span>
|
795
|
+
348: <span class="ruby-keyword kw">end</span>
|
796
|
+
</pre>
|
797
|
+
</div>
|
798
|
+
</div>
|
799
|
+
</div>
|
800
|
+
|
801
|
+
<div id="method-M000029" class="method-detail">
|
802
|
+
<a name="M000029"></a>
|
803
|
+
|
804
|
+
<div class="method-heading">
|
805
|
+
<a href="#M000029" class="method-signature">
|
806
|
+
<span class="method-name">zap!</span><span class="method-args">()</span>
|
807
|
+
</a>
|
808
|
+
</div>
|
809
|
+
|
810
|
+
<div class="method-description">
|
811
|
+
<p><a class="source-toggle" href="#"
|
812
|
+
onclick="toggleCode('M000029-source');return false;">[Source]</a></p>
|
813
|
+
<div class="method-source-code" id="M000029-source">
|
814
|
+
<pre>
|
815
|
+
<span class="ruby-comment cmt"># File lib/daemons/application.rb, line 350</span>
|
816
|
+
350: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">zap!</span>
|
817
|
+
351: <span class="ruby-keyword kw">begin</span>; <span class="ruby-ivar">@pid</span>.<span class="ruby-identifier">cleanup</span>; <span class="ruby-keyword kw">rescue</span> <span class="ruby-operator">::</span><span class="ruby-constant">Exception</span>; <span class="ruby-keyword kw">end</span>
|
818
|
+
352: <span class="ruby-keyword kw">end</span>
|
819
|
+
</pre>
|
820
|
+
</div>
|
821
|
+
</div>
|
822
|
+
</div>
|
823
|
+
|
824
|
+
|
825
|
+
</div>
|
826
|
+
|
827
|
+
|
828
|
+
</div>
|
829
|
+
|
830
|
+
|
831
|
+
<div id="validator-badges">
|
832
|
+
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
833
|
+
</div>
|
834
|
+
|
835
|
+
</body>
|
836
|
+
</html>
|