mlanett-daemons 1.0.13 → 1.1.10.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. data/Gemfile.lock +12 -2
  2. data/LICENSE +1 -8
  3. data/README-mlanett.rdoc +8 -0
  4. data/{README → README.rdoc} +6 -15
  5. data/Releases +84 -9
  6. data/TODO +1 -5
  7. data/daemons.gemspec +1 -0
  8. data/examples/call/call.rb +1 -0
  9. data/examples/daemonize/daemonize.rb +10 -3
  10. data/examples/run/ctrl_hanging.rb +19 -0
  11. data/examples/run/ctrl_monitor_multiple.rb +18 -0
  12. data/examples/run/ctrl_normal.rb +0 -1
  13. data/examples/run/ctrl_proc.rb.output +20 -0
  14. data/examples/run/ctrl_proc_rand.rb +23 -0
  15. data/examples/run/ctrl_slowstop.rb +16 -0
  16. data/examples/run/myserver_crashing.rb +2 -2
  17. data/examples/run/myserver_hanging.rb +21 -0
  18. data/examples/run/myserver_slowstop.rb +21 -0
  19. data/lib/daemons.rb +38 -10
  20. data/lib/daemons/application.rb +131 -26
  21. data/lib/daemons/application_group.rb +58 -10
  22. data/lib/daemons/change_privilege.rb +19 -0
  23. data/lib/daemons/cmdline.rb +10 -6
  24. data/lib/daemons/controller.rb +5 -2
  25. data/lib/daemons/daemonize.rb +64 -150
  26. data/lib/daemons/etc_extension.rb +12 -0
  27. data/lib/daemons/exceptions.rb +3 -0
  28. data/lib/daemons/monitor.rb +27 -19
  29. data/lib/daemons/pid.rb +13 -14
  30. data/lib/daemons/pidfile.rb +14 -7
  31. data/lib/daemons/pidmem.rb +9 -0
  32. data/lib/daemons/version.rb +1 -1
  33. data/spec/pidfile_spec.rb +12 -0
  34. data/spec/spec_helper.rb +1 -0
  35. metadata +31 -47
  36. data/daemons.tmproj +0 -56
  37. data/examples/run/myserver_crashing.rb.output +0 -30
  38. data/html/classes/Daemonize.html +0 -497
  39. data/html/classes/Daemons.html +0 -683
  40. data/html/classes/Daemons/Application.html +0 -836
  41. data/html/classes/Daemons/ApplicationGroup.html +0 -508
  42. data/html/classes/Daemons/CmdException.html +0 -113
  43. data/html/classes/Daemons/Controller.html +0 -429
  44. data/html/classes/Daemons/Error.html +0 -113
  45. data/html/classes/Daemons/Exception.html +0 -111
  46. data/html/classes/Daemons/Monitor.html +0 -263
  47. data/html/classes/Daemons/Optparse.html +0 -244
  48. data/html/classes/Daemons/Pid.html +0 -339
  49. data/html/classes/Daemons/PidFile.html +0 -441
  50. data/html/classes/Daemons/PidMem.html +0 -126
  51. data/html/classes/Daemons/RuntimeException.html +0 -113
  52. data/html/classes/Daemons/SystemError.html +0 -163
  53. data/html/created.rid +0 -1
  54. data/html/files/README.html +0 -377
  55. data/html/files/Releases.html +0 -342
  56. data/html/files/TODO.html +0 -121
  57. data/html/files/lib/daemons/application_group_rb.html +0 -101
  58. data/html/files/lib/daemons/application_rb.html +0 -110
  59. data/html/files/lib/daemons/cmdline_rb.html +0 -101
  60. data/html/files/lib/daemons/controller_rb.html +0 -101
  61. data/html/files/lib/daemons/daemonize_rb.html +0 -207
  62. data/html/files/lib/daemons/exceptions_rb.html +0 -101
  63. data/html/files/lib/daemons/monitor_rb.html +0 -108
  64. data/html/files/lib/daemons/pid_rb.html +0 -108
  65. data/html/files/lib/daemons/pidfile_rb.html +0 -108
  66. data/html/files/lib/daemons/pidmem_rb.html +0 -108
  67. data/html/files/lib/daemons_rb.html +0 -117
  68. data/html/fr_class_index.html +0 -41
  69. data/html/fr_file_index.html +0 -40
  70. data/html/fr_method_index.html +0 -91
  71. data/html/index.html +0 -24
  72. data/html/rdoc-style.css +0 -208
  73. data/test/call_as_daemon.rb +0 -12
  74. data/test/tc_main.rb +0 -24
  75. data/test/test1.rb +0 -19
  76. data/test/testapp.rb +0 -11
@@ -1,683 +0,0 @@
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>Module: Daemons</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>Module</strong></td>
53
- <td class="class-name-in-header">Daemons</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
- <a href="../files/lib/daemons/application_group_rb.html">
63
- lib/daemons/application_group.rb
64
- </a>
65
- <br />
66
- <a href="../files/lib/daemons/cmdline_rb.html">
67
- lib/daemons/cmdline.rb
68
- </a>
69
- <br />
70
- <a href="../files/lib/daemons/controller_rb.html">
71
- lib/daemons/controller.rb
72
- </a>
73
- <br />
74
- <a href="../files/lib/daemons/exceptions_rb.html">
75
- lib/daemons/exceptions.rb
76
- </a>
77
- <br />
78
- <a href="../files/lib/daemons/monitor_rb.html">
79
- lib/daemons/monitor.rb
80
- </a>
81
- <br />
82
- <a href="../files/lib/daemons/pid_rb.html">
83
- lib/daemons/pid.rb
84
- </a>
85
- <br />
86
- <a href="../files/lib/daemons/pidfile_rb.html">
87
- lib/daemons/pidfile.rb
88
- </a>
89
- <br />
90
- <a href="../files/lib/daemons/pidmem_rb.html">
91
- lib/daemons/pidmem.rb
92
- </a>
93
- <br />
94
- <a href="../files/lib/daemons_rb.html">
95
- lib/daemons.rb
96
- </a>
97
- <br />
98
- </td>
99
- </tr>
100
-
101
- </table>
102
- </div>
103
- <!-- banner header -->
104
-
105
- <div id="bodyContent">
106
-
107
-
108
-
109
- <div id="contextContent">
110
-
111
- <div id="description">
112
- <p>
113
- All functions and classes that <a href="Daemons.html">Daemons</a> provides
114
- reside in this module.
115
- </p>
116
- <p>
117
- <a href="Daemons.html">Daemons</a> is normally invoked by one of the
118
- following four ways:
119
- </p>
120
- <ol>
121
- <li><tt><a href="Daemons.html#M000001">Daemons.run</a>(script, options)</tt>:
122
- This is used in wrapper-scripts that are supposed to control other ruby
123
- scripts or external applications. Control is completely passed to the
124
- daemons library. Such wrapper script need to be invoked with command line
125
- options like &#8216;start&#8217; or &#8216;stop&#8217; to do anything
126
- useful.
127
-
128
- </li>
129
- <li><tt><a href="Daemons.html#M000002">Daemons.run_proc</a>(app_name, options)
130
- { (&#8230;) }</tt>: This is used in wrapper-scripts that are supposed to
131
- control a proc. Control is completely passed to the daemons library. Such
132
- wrapper script need to be invoked with command line options like
133
- &#8216;start&#8217; or &#8216;stop&#8217; to do anything useful.
134
-
135
- </li>
136
- <li><tt><a href="Daemons.html#M000003">Daemons.call(options)</a> { block
137
- }</tt>: Execute the block in a new daemon. <tt><a
138
- href="Daemons.html#M000003">Daemons.call</a></tt> will return immediately
139
- after spawning the daemon with the new <a
140
- href="Daemons/Application.html">Application</a> object as a return value.
141
-
142
- </li>
143
- <li><tt><a href="Daemons.html#M000004">Daemons.daemonize(options)</a></tt>: <a
144
- href="Daemonize.html">Daemonize</a> the currently runnig process, i.e. the
145
- calling process will become a daemon.
146
-
147
- </li>
148
- </ol>
149
- <h2>What does daemons internally do with my daemons?</h2>
150
- <table>
151
- <tr><td valign="top"><b>or</b>:</td><td>why do my daemons crash when they try to open a file?
152
-
153
- </td></tr>
154
- <tr><td valign="top"><b>or</b>:</td><td>why can I not see any output from the daemon on the console (when using for
155
- example <tt>puts</tt>)?
156
-
157
- </td></tr>
158
- </table>
159
- <p>
160
- From a technical aspect of view, daemons does the following when creating a
161
- daemon:
162
- </p>
163
- <ol>
164
- <li>Forks a child (and exits the parent process, if needed)
165
-
166
- </li>
167
- <li>Becomes a session leader (which detaches the program from the controlling
168
- terminal).
169
-
170
- </li>
171
- <li>Forks another child process and exits first child. This prevents the
172
- potential of acquiring a controlling terminal.
173
-
174
- </li>
175
- <li>Changes the current working directory to &quot;/&quot;.
176
-
177
- </li>
178
- <li>Clears the file creation mask (sets <tt>umask</tt> to 0000).
179
-
180
- </li>
181
- <li>Closes file descriptors (reopens <tt>STDOUT</tt> and <tt>STDERR</tt> to
182
- point to a logfile if possible).
183
-
184
- </li>
185
- </ol>
186
- <p>
187
- So what does this mean for your daemons:
188
- </p>
189
- <ul>
190
- <li>the current directory is &#8217;/&#8217;
191
-
192
- </li>
193
- <li>you cannot receive any input from the console (for example no
194
- <tt>gets</tt>)
195
-
196
- </li>
197
- <li>you cannot output anything from the daemons with
198
- <tt>puts</tt>/<tt>print</tt> unless a logfile is used
199
-
200
- </li>
201
- </ul>
202
- <h2>How do PidFiles work? Where are they stored?</h2>
203
- <p>
204
- Also, you are maybe interested in reading the documentation for the class
205
- <a href="Daemons/PidFile.html">PidFile</a>. There you can find out about
206
- how <a href="Daemons.html">Daemons</a> works internally and how and where
207
- the so called <em>PidFiles</em> are stored.
208
- </p>
209
-
210
- </div>
211
-
212
-
213
- </div>
214
-
215
- <div id="method-list">
216
- <h3 class="section-bar">Methods</h3>
217
-
218
- <div class="name-list">
219
- <a href="#M000003">call</a>&nbsp;&nbsp;
220
- <a href="#M000006">controller</a>&nbsp;&nbsp;
221
- <a href="#M000004">daemonize</a>&nbsp;&nbsp;
222
- <a href="#M000005">group</a>&nbsp;&nbsp;
223
- <a href="#M000001">run</a>&nbsp;&nbsp;
224
- <a href="#M000002">run_proc</a>&nbsp;&nbsp;
225
- </div>
226
- </div>
227
-
228
- </div>
229
-
230
-
231
- <!-- if includes -->
232
-
233
- <div id="section">
234
-
235
- <div id="class-list">
236
- <h3 class="section-bar">Classes and Modules</h3>
237
-
238
- Class <a href="Daemons/Application.html" class="link">Daemons::Application</a><br />
239
- Class <a href="Daemons/ApplicationGroup.html" class="link">Daemons::ApplicationGroup</a><br />
240
- Class <a href="Daemons/CmdException.html" class="link">Daemons::CmdException</a><br />
241
- Class <a href="Daemons/Controller.html" class="link">Daemons::Controller</a><br />
242
- Class <a href="Daemons/Error.html" class="link">Daemons::Error</a><br />
243
- Class <a href="Daemons/Exception.html" class="link">Daemons::Exception</a><br />
244
- Class <a href="Daemons/Monitor.html" class="link">Daemons::Monitor</a><br />
245
- Class <a href="Daemons/Optparse.html" class="link">Daemons::Optparse</a><br />
246
- Class <a href="Daemons/Pid.html" class="link">Daemons::Pid</a><br />
247
- Class <a href="Daemons/PidFile.html" class="link">Daemons::PidFile</a><br />
248
- Class <a href="Daemons/PidMem.html" class="link">Daemons::PidMem</a><br />
249
- Class <a href="Daemons/RuntimeException.html" class="link">Daemons::RuntimeException</a><br />
250
- Class <a href="Daemons/SystemError.html" class="link">Daemons::SystemError</a><br />
251
-
252
- </div>
253
-
254
- <div id="constants-list">
255
- <h3 class="section-bar">Constants</h3>
256
-
257
- <div class="name-list">
258
- <table summary="Constants">
259
- <tr class="top-aligned-row context-row">
260
- <td class="context-item-name">VERSION</td>
261
- <td>=</td>
262
- <td class="context-item-value">&quot;1.0.11&quot;</td>
263
- </tr>
264
- </table>
265
- </div>
266
- </div>
267
-
268
-
269
-
270
-
271
-
272
-
273
- <!-- if method_list -->
274
- <div id="methods">
275
- <h3 class="section-bar">Public Instance methods</h3>
276
-
277
- <div id="method-M000003" class="method-detail">
278
- <a name="M000003"></a>
279
-
280
- <div class="method-heading">
281
- <a href="#M000003" class="method-signature">
282
- <span class="method-name">call</span><span class="method-args">(options = {}, &amp;block)</span>
283
- </a>
284
- </div>
285
-
286
- <div class="method-description">
287
- <p>
288
- Execute the block in a new daemon. <tt><a
289
- href="Daemons.html#M000003">Daemons.call</a></tt> will return immediately
290
- after spawning the daemon with the new <a
291
- href="Daemons/Application.html">Application</a> object as a return value.
292
- </p>
293
- <table>
294
- <tr><td valign="top"><tt>options</tt>:</td><td>A hash that may contain one or more of the options listed below
295
-
296
- </td></tr>
297
- <tr><td valign="top"><tt>block</tt>:</td><td>The block to <a href="Daemons.html#M000003">call</a> in the daemon.
298
-
299
- </td></tr>
300
- </table>
301
- <h3>Options:</h3>
302
- <table>
303
- <tr><td valign="top"><tt>:multiple</tt>:</td><td>Specifies whether multiple instances of the same script are allowed to <a
304
- href="Daemons.html#M000001">run</a> at the same time
305
-
306
- </td></tr>
307
- <tr><td valign="top"><tt>:ontop</tt>:</td><td>When given, stay on top, i.e. do not <a
308
- href="Daemons.html#M000004">daemonize</a> the application
309
-
310
- </td></tr>
311
- <tr><td valign="top"><tt>:backtrace</tt>:</td><td>Write a backtrace of the last exceptions to the file
312
- &#8217;[app_name].log&#8217; in the pid-file directory if the application
313
- exits due to an uncaught exception
314
-
315
- </td></tr>
316
- </table>
317
- <hr size="3"></hr><h3>Example:</h3>
318
- <pre>
319
- options = {
320
- :backtrace =&gt; true,
321
- :monitor =&gt; true,
322
- :ontop =&gt; true
323
- }
324
-
325
- Daemons.call(options) begin
326
- # Server loop:
327
- loop {
328
- conn = accept_conn()
329
- serve(conn)
330
- }
331
- end
332
- </pre>
333
- <p><a class="source-toggle" href="#"
334
- onclick="toggleCode('M000003-source');return false;">[Source]</a></p>
335
- <div class="method-source-code" id="M000003-source">
336
- <pre>
337
- <span class="ruby-comment cmt"># File lib/daemons.rb, line 227</span>
338
- 227: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">call</span>(<span class="ruby-identifier">options</span> = {}, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
339
- 228: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">block_given?</span>
340
- 229: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Daemons.call: no block given&quot;</span>
341
- 230: <span class="ruby-keyword kw">end</span>
342
- 231:
343
- 232: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:proc</span>] = <span class="ruby-identifier">block</span>
344
- 233: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:mode</span>] = <span class="ruby-identifier">:proc</span>
345
- 234:
346
- 235: <span class="ruby-ivar">@group</span> <span class="ruby-operator">||=</span> <span class="ruby-constant">ApplicationGroup</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'proc'</span>, <span class="ruby-identifier">options</span>)
347
- 236:
348
- 237: <span class="ruby-identifier">new_app</span> = <span class="ruby-ivar">@group</span>.<span class="ruby-identifier">new_application</span>(<span class="ruby-identifier">options</span>)
349
- 238: <span class="ruby-identifier">new_app</span>.<span class="ruby-identifier">start</span>
350
- 239:
351
- 240: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">new_app</span>
352
- 241: <span class="ruby-keyword kw">end</span>
353
- </pre>
354
- </div>
355
- </div>
356
- </div>
357
-
358
- <div id="method-M000006" class="method-detail">
359
- <a name="M000006"></a>
360
-
361
- <div class="method-heading">
362
- <a href="#M000006" class="method-signature">
363
- <span class="method-name">controller</span><span class="method-args">()</span>
364
- </a>
365
- </div>
366
-
367
- <div class="method-description">
368
- <p>
369
- Return the internal <a href="Daemons/Controller.html">Controller</a>
370
- instance.
371
- </p>
372
- <p><a class="source-toggle" href="#"
373
- onclick="toggleCode('M000006-source');return false;">[Source]</a></p>
374
- <div class="method-source-code" id="M000006-source">
375
- <pre>
376
- <span class="ruby-comment cmt"># File lib/daemons.rb, line 281</span>
377
- 281: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">controller</span>; <span class="ruby-ivar">@controller</span>; <span class="ruby-keyword kw">end</span>
378
- </pre>
379
- </div>
380
- </div>
381
- </div>
382
-
383
- <div id="method-M000004" class="method-detail">
384
- <a name="M000004"></a>
385
-
386
- <div class="method-heading">
387
- <a href="#M000004" class="method-signature">
388
- <span class="method-name">daemonize</span><span class="method-args">(options = {})</span>
389
- </a>
390
- </div>
391
-
392
- <div class="method-description">
393
- <p>
394
- <a href="Daemonize.html">Daemonize</a> the currently runnig process, i.e.
395
- the calling process will become a daemon.
396
- </p>
397
- <table>
398
- <tr><td valign="top"><tt>options</tt>:</td><td>A hash that may contain one or more of the options listed below
399
-
400
- </td></tr>
401
- </table>
402
- <h3>Options:</h3>
403
- <table>
404
- <tr><td valign="top"><tt>:ontop</tt>:</td><td>When given, stay on top, i.e. do not <a
405
- href="Daemons.html#M000004">daemonize</a> the application
406
-
407
- </td></tr>
408
- <tr><td valign="top"><tt>:backtrace</tt>:</td><td>Write a backtrace of the last exceptions to the file
409
- &#8217;[app_name].log&#8217; in the pid-file directory if the application
410
- exits due to an uncaught exception
411
-
412
- </td></tr>
413
- </table>
414
- <hr size="3"></hr><h3>Example:</h3>
415
- <pre>
416
- options = {
417
- :backtrace =&gt; true,
418
- :ontop =&gt; true
419
- }
420
-
421
- Daemons.daemonize(options)
422
-
423
- # Server loop:
424
- loop {
425
- conn = accept_conn()
426
- serve(conn)
427
- }
428
- </pre>
429
- <p><a class="source-toggle" href="#"
430
- onclick="toggleCode('M000004-source');return false;">[Source]</a></p>
431
- <div class="method-source-code" id="M000004-source">
432
- <pre>
433
- <span class="ruby-comment cmt"># File lib/daemons.rb, line 269</span>
434
- 269: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">daemonize</span>(<span class="ruby-identifier">options</span> = {})
435
- 270: <span class="ruby-ivar">@group</span> <span class="ruby-operator">||=</span> <span class="ruby-constant">ApplicationGroup</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'self'</span>, <span class="ruby-identifier">options</span>)
436
- 271:
437
- 272: <span class="ruby-ivar">@group</span>.<span class="ruby-identifier">new_application</span>(<span class="ruby-identifier">:mode</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">:none</span>).<span class="ruby-identifier">start</span>
438
- 273: <span class="ruby-keyword kw">end</span>
439
- </pre>
440
- </div>
441
- </div>
442
- </div>
443
-
444
- <div id="method-M000005" class="method-detail">
445
- <a name="M000005"></a>
446
-
447
- <div class="method-heading">
448
- <a href="#M000005" class="method-signature">
449
- <span class="method-name">group</span><span class="method-args">()</span>
450
- </a>
451
- </div>
452
-
453
- <div class="method-description">
454
- <p>
455
- Return the internal <a
456
- href="Daemons/ApplicationGroup.html">ApplicationGroup</a> instance.
457
- </p>
458
- <p><a class="source-toggle" href="#"
459
- onclick="toggleCode('M000005-source');return false;">[Source]</a></p>
460
- <div class="method-source-code" id="M000005-source">
461
- <pre>
462
- <span class="ruby-comment cmt"># File lib/daemons.rb, line 277</span>
463
- 277: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">group</span>; <span class="ruby-ivar">@group</span>; <span class="ruby-keyword kw">end</span>
464
- </pre>
465
- </div>
466
- </div>
467
- </div>
468
-
469
- <div id="method-M000001" class="method-detail">
470
- <a name="M000001"></a>
471
-
472
- <div class="method-heading">
473
- <a href="#M000001" class="method-signature">
474
- <span class="method-name">run</span><span class="method-args">(script, options = {})</span>
475
- </a>
476
- </div>
477
-
478
- <div class="method-description">
479
- <p>
480
- Passes control to <a href="Daemons.html">Daemons</a>. This is used in
481
- wrapper-scripts that are supposed to control other ruby scripts or external
482
- applications. Control is completely passed to the daemons library. Such
483
- wrapper script should be invoked with command line options like
484
- &#8216;start&#8217; or &#8216;stop&#8217; to do anything useful.
485
- </p>
486
- <table>
487
- <tr><td valign="top"><tt>script</tt>:</td><td>This is the path to the script that should be <a
488
- href="Daemons.html#M000001">run</a> as a daemon. Please note that <a
489
- href="Daemons.html">Daemons</a> runs this script with <tt>load
490
- &lt;script&gt;</tt>. Also note that <a href="Daemons.html">Daemons</a>
491
- cannot detect the directory in which the controlling script resides, so
492
- this has to be either an absolute path or you have to <a
493
- href="Daemons.html#M000001">run</a> the controlling script from the
494
- appropriate directory.
495
-
496
- </td></tr>
497
- <tr><td valign="top"><tt>options</tt>:</td><td>A hash that may contain one or more of the options listed below
498
-
499
- </td></tr>
500
- </table>
501
- <h3>Options:</h3>
502
- <table>
503
- <tr><td valign="top"><tt>:app_name</tt>:</td><td>The name of the application. This will be used to contruct the name of the
504
- pid files and log files. Defaults to the basename of the script.
505
-
506
- </td></tr>
507
- <tr><td valign="top"><tt>:ARGV</tt>:</td><td>An array of strings containing parameters and switches for <a
508
- href="Daemons.html">Daemons</a>. This includes both parameters for <a
509
- href="Daemons.html">Daemons</a> itself and the controlled scripted. These
510
- are assumed to be separated by an array element &#8217;&#8212;&#8217;,
511
- .e.g. [&#8216;start&#8217;, &#8216;f&#8217;, &#8217;&#8212;&#8217;,
512
- &#8216;param1_for_script&#8217;, &#8216;param2_for_script&#8217;]. If not
513
- given, ARGV (the parameters given to the Ruby process) will be used.
514
-
515
- </td></tr>
516
- <tr><td valign="top"><tt>:dir_mode</tt>:</td><td>Either <tt>:script</tt> (the directory for writing the pid files to given
517
- by <tt>:dir</tt> is interpreted relative to the script location given by
518
- <tt>script</tt>) or <tt>:normal</tt> (the directory given by <tt>:dir</tt>
519
- is interpreted as a (absolute or relative) path) or <tt>:system</tt>
520
- (<tt>/var/run</tt> is used as the pid file directory)
521
-
522
- </td></tr>
523
- <tr><td valign="top"><tt>:dir</tt>:</td><td>Used in combination with <tt>:dir_mode</tt> (description above)
524
-
525
- </td></tr>
526
- <tr><td valign="top"><tt>:multiple</tt>:</td><td>Specifies whether multiple instances of the same script are allowed to <a
527
- href="Daemons.html#M000001">run</a> at the same time
528
-
529
- </td></tr>
530
- <tr><td valign="top"><tt>:ontop</tt>:</td><td>When given (i.e. set to true), stay on top, i.e. do not <a
531
- href="Daemons.html#M000004">daemonize</a> the application (but the pid-file
532
- and other things are written as usual)
533
-
534
- </td></tr>
535
- <tr><td valign="top"><tt>:mode</tt>:</td><td><tt>:load</tt> Load the script with <tt>Kernel.load</tt>; <tt>:exec</tt>
536
- Execute the script file with <tt>Kernel.exec</tt>
537
-
538
- </td></tr>
539
- <tr><td valign="top"><tt>:backtrace</tt>:</td><td>Write a backtrace of the last exceptions to the file
540
- &#8217;[app_name].log&#8217; in the pid-file directory if the application
541
- exits due to an uncaught exception
542
-
543
- </td></tr>
544
- <tr><td valign="top"><tt>:monitor</tt>:</td><td><a href="Daemons/Monitor.html">Monitor</a> the programs and restart crashed
545
- instances
546
-
547
- </td></tr>
548
- <tr><td valign="top"><tt>:log_output</tt>:</td><td>When given (i.e. set to true), redirect both STDOUT and STDERR to a logfile
549
- named &#8217;[app_name].output&#8217; in the pid-file directory
550
-
551
- </td></tr>
552
- <tr><td valign="top"><tt>:keep_pid_files</tt>:</td><td>When given do not delete lingering pid-files (files for which the process
553
- is no longer running).
554
-
555
- </td></tr>
556
- <tr><td valign="top"><tt>:hard_exit</tt>:</td><td>When given use exit! to end a daemons instead of exit (this will for
557
- example not <a href="Daemons.html#M000003">call</a> at_exit handlers).
558
-
559
- </td></tr>
560
- </table>
561
- <hr size="3"></hr><h3>Example:</h3>
562
- <pre>
563
- options = {
564
- :app_name =&gt; &quot;my_app&quot;,
565
- :ARGV =&gt; ['start', '-f', '--', 'param_for_myscript']
566
- :dir_mode =&gt; :script,
567
- :dir =&gt; 'pids',
568
- :multiple =&gt; true,
569
- :ontop =&gt; true,
570
- :mode =&gt; :exec,
571
- :backtrace =&gt; true,
572
- :monitor =&gt; true
573
- }
574
-
575
- Daemons.run(File.join(File.dirname(__FILE__), 'myscript.rb'), options)
576
- </pre>
577
- <p><a class="source-toggle" href="#"
578
- onclick="toggleCode('M000001-source');return false;">[Source]</a></p>
579
- <div class="method-source-code" id="M000001-source">
580
- <pre>
581
- <span class="ruby-comment cmt"># File lib/daemons.rb, line 134</span>
582
- 134: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">run</span>(<span class="ruby-identifier">script</span>, <span class="ruby-identifier">options</span> = {})
583
- 135: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:script</span>] = <span class="ruby-identifier">script</span>
584
- 136: <span class="ruby-ivar">@controller</span> = <span class="ruby-constant">Controller</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">options</span>, <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:ARGV</span>] <span class="ruby-operator">||</span> <span class="ruby-constant">ARGV</span>)
585
- 137:
586
- 138: <span class="ruby-ivar">@controller</span>.<span class="ruby-identifier">catch_exceptions</span> {
587
- 139: <span class="ruby-ivar">@controller</span>.<span class="ruby-identifier">run</span>
588
- 140: }
589
- 141:
590
- 142: <span class="ruby-comment cmt"># I don't think anybody will ever use @group, as this location should not be reached under non-error conditions</span>
591
- 143: <span class="ruby-ivar">@group</span> = <span class="ruby-ivar">@controller</span>.<span class="ruby-identifier">group</span>
592
- 144: <span class="ruby-keyword kw">end</span>
593
- </pre>
594
- </div>
595
- </div>
596
- </div>
597
-
598
- <div id="method-M000002" class="method-detail">
599
- <a name="M000002"></a>
600
-
601
- <div class="method-heading">
602
- <a href="#M000002" class="method-signature">
603
- <span class="method-name">run_proc</span><span class="method-args">(app_name, options = {}, &amp;block)</span>
604
- </a>
605
- </div>
606
-
607
- <div class="method-description">
608
- <p>
609
- Passes control to <a href="Daemons.html">Daemons</a>. This function does
610
- the same as <a href="Daemons.html#M000001">Daemons.run</a> except that not
611
- a script but a proc will be <a href="Daemons.html#M000001">run</a> as a
612
- daemon while this script provides command line options like
613
- &#8216;start&#8217; or &#8216;stop&#8217; and the whole pid-file management
614
- to control the proc.
615
- </p>
616
- <table>
617
- <tr><td valign="top"><tt>app_name</tt>:</td><td>The name of the application. This will be used to contruct the name of the
618
- pid files and log files. Defaults to the basename of the script.
619
-
620
- </td></tr>
621
- <tr><td valign="top"><tt>options</tt>:</td><td>A hash that may contain one or more of the options listed in the
622
- documentation for <a href="Daemons.html#M000001">Daemons.run</a>
623
-
624
- </td></tr>
625
- </table>
626
- <p>
627
- A block must be given to this function. The block will be used as the :proc
628
- entry in the options hash.
629
- </p>
630
- <hr size="3"></hr><h3>Example:</h3>
631
- <pre>
632
- Daemons.run_proc('myproc.rb') do
633
- loop do
634
- accept_connection()
635
- read_request()
636
- send_response()
637
- close_connection()
638
- end
639
- end
640
- </pre>
641
- <p><a class="source-toggle" href="#"
642
- onclick="toggleCode('M000002-source');return false;">[Source]</a></p>
643
- <div class="method-source-code" id="M000002-source">
644
- <pre>
645
- <span class="ruby-comment cmt"># File lib/daemons.rb, line 174</span>
646
- 174: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">run_proc</span>(<span class="ruby-identifier">app_name</span>, <span class="ruby-identifier">options</span> = {}, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
647
- 175: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:app_name</span>] = <span class="ruby-identifier">app_name</span>
648
- 176: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:mode</span>] = <span class="ruby-identifier">:proc</span>
649
- 177: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:proc</span>] = <span class="ruby-identifier">block</span>
650
- 178:
651
- 179: <span class="ruby-comment cmt"># we do not have a script location so the the :script :dir_mode cannot be used, change it to :normal</span>
652
- 180: <span class="ruby-keyword kw">if</span> [<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">:script</span>].<span class="ruby-identifier">include?</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:dir_mode</span>]
653
- 181: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:dir_mode</span>] = <span class="ruby-identifier">:normal</span>
654
- 182: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:dir</span>] = <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-value str">'.'</span>)
655
- 183: <span class="ruby-keyword kw">end</span>
656
- 184:
657
- 185: <span class="ruby-ivar">@controller</span> = <span class="ruby-constant">Controller</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">options</span>, <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:ARGV</span>] <span class="ruby-operator">||</span> <span class="ruby-constant">ARGV</span>)
658
- 186:
659
- 187: <span class="ruby-ivar">@controller</span>.<span class="ruby-identifier">catch_exceptions</span> {
660
- 188: <span class="ruby-ivar">@controller</span>.<span class="ruby-identifier">run</span>
661
- 189: }
662
- 190:
663
- 191: <span class="ruby-comment cmt"># I don't think anybody will ever use @group, as this location should not be reached under non-error conditions</span>
664
- 192: <span class="ruby-ivar">@group</span> = <span class="ruby-ivar">@controller</span>.<span class="ruby-identifier">group</span>
665
- 193: <span class="ruby-keyword kw">end</span>
666
- </pre>
667
- </div>
668
- </div>
669
- </div>
670
-
671
-
672
- </div>
673
-
674
-
675
- </div>
676
-
677
-
678
- <div id="validator-badges">
679
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
680
- </div>
681
-
682
- </body>
683
- </html>