daemons 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README CHANGED
@@ -1,4 +1,4 @@
1
- = Daemons Version 1.0.1
1
+ = Daemons Version 1.0.2
2
2
 
3
3
  (See Releases for release-specific information)
4
4
 
data/Releases CHANGED
@@ -1,5 +1,14 @@
1
1
  = Daemons Release History
2
2
 
3
+ == Release 1.0.2: September 26, 2006
4
+
5
+ * Changed the 'ps -ax' call back to 'ps ax'.
6
+ * Fixed the documentation for the :normal :dir_mode.
7
+ * As a default for Daemons.run_proc, the pid file is now saved in the current directory.
8
+ * In :ontop mode for running a proc (this is equal to calling something like 'ruby ctrl_proc.rb run'),
9
+ the proc now runs directly in the calling script, not in a forked process anymore (thanks to Paul Butcher).
10
+ * Set $0 to app_name in the daemons (thanks to Ilya Novoselov).
11
+
3
12
  == Release 1.0.1: August 30, 2006
4
13
 
5
14
  * Fixed a regex for parsing the 'ps ax' system call. (thanks to Garance Alistair Drosehn)
@@ -1,4 +1,4 @@
1
- lib_dir = File.expand_path(File.join(File.split(__FILE__)[0], '../../lib'))
1
+ lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
2
2
 
3
3
  if File.exists?(File.join(lib_dir, 'daemons.rb'))
4
4
  $LOAD_PATH.unshift lib_dir
@@ -1,4 +1,4 @@
1
- lib_dir = File.expand_path(File.join(File.split(__FILE__)[0], '../../lib'))
1
+ lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
2
2
 
3
3
  if File.exists?(File.join(lib_dir, 'daemons.rb'))
4
4
  $LOAD_PATH.unshift lib_dir
@@ -1,4 +1,4 @@
1
- lib_dir = File.expand_path(File.join(File.split(__FILE__)[0], '../../lib'))
1
+ lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
2
2
 
3
3
  if File.exists?(File.join(lib_dir, 'daemons.rb'))
4
4
  $LOAD_PATH.unshift lib_dir
@@ -1,4 +1,4 @@
1
- lib_dir = File.expand_path(File.join(File.split(__FILE__)[0], '../../lib'))
1
+ lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
2
2
 
3
3
  if File.exists?(File.join(lib_dir, 'daemons.rb'))
4
4
  $LOAD_PATH.unshift lib_dir
@@ -14,4 +14,4 @@ options = {
14
14
  :backtrace => true
15
15
  }
16
16
 
17
- Daemons.run(File.join(File.split(__FILE__)[0], 'myserver_crashing.rb'), options)
17
+ Daemons.run(File.join(File.dirname(__FILE__), 'myserver_crashing.rb'), options)
@@ -1,4 +1,4 @@
1
- lib_dir = File.expand_path(File.join(File.split(__FILE__)[0], '../../lib'))
1
+ lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
2
2
 
3
3
  if File.exists?(File.join(lib_dir, 'daemons.rb'))
4
4
  $LOAD_PATH.unshift lib_dir
@@ -10,7 +10,7 @@ require 'daemons'
10
10
 
11
11
 
12
12
  options = {
13
- :exec => true
13
+ :mode => :exec
14
14
  }
15
15
 
16
- Daemons.run(File.join(File.split(__FILE__)[0], 'myserver.rb'), options)
16
+ Daemons.run(File.join(File.dirname(__FILE__), 'myserver.rb'), options)
@@ -1,4 +1,4 @@
1
- lib_dir = File.expand_path(File.join(File.split(__FILE__)[0], '../../lib'))
1
+ lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
2
2
 
3
3
  if File.exists?(File.join(lib_dir, 'daemons.rb'))
4
4
  $LOAD_PATH.unshift lib_dir
@@ -12,4 +12,4 @@ require 'daemons'
12
12
  options = {
13
13
  }
14
14
 
15
- Daemons.run(File.join(File.split(__FILE__)[0], 'myserver_exiting.rb'), options)
15
+ Daemons.run(File.join(File.dirname(__FILE__), 'myserver_exiting.rb'), options)
@@ -1,4 +1,4 @@
1
- lib_dir = File.expand_path(File.join(File.split(__FILE__)[0], '../../lib'))
1
+ lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
2
2
 
3
3
  if File.exists?(File.join(lib_dir, 'daemons.rb'))
4
4
  $LOAD_PATH.unshift lib_dir
@@ -13,4 +13,4 @@ options = {
13
13
  :monitor => true
14
14
  }
15
15
 
16
- Daemons.run(File.join(File.split(__FILE__)[0], 'myserver_crashing.rb'), options)
16
+ Daemons.run(File.join(File.dirname(__FILE__), 'myserver_crashing.rb'), options)
@@ -1,4 +1,4 @@
1
- lib_dir = File.expand_path(File.join(File.split(__FILE__)[0], '../../lib'))
1
+ lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
2
2
 
3
3
  if File.exists?(File.join(lib_dir, 'daemons.rb'))
4
4
  $LOAD_PATH.unshift lib_dir
@@ -13,4 +13,4 @@ options = {
13
13
  :multiple => true
14
14
  }
15
15
 
16
- Daemons.run(File.join(File.split(__FILE__)[0], 'myserver.rb'), options)
16
+ Daemons.run(File.join(File.dirname(__FILE__), 'myserver.rb'), options)
@@ -1,4 +1,4 @@
1
- lib_dir = File.expand_path(File.join(File.split(__FILE__)[0], '../../lib'))
1
+ lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
2
2
 
3
3
  if File.exists?(File.join(lib_dir, 'daemons.rb'))
4
4
  $LOAD_PATH.unshift lib_dir
@@ -9,4 +9,4 @@ end
9
9
  require 'daemons'
10
10
 
11
11
 
12
- Daemons.run(File.join(File.split(__FILE__)[0], 'myserver.rb'))
12
+ Daemons.run(File.join(File.dirname(__FILE__), 'myserver.rb'))
@@ -1,4 +1,4 @@
1
- lib_dir = File.expand_path(File.join(File.split(__FILE__)[0], '../../lib'))
1
+ lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
2
2
 
3
3
  if File.exists?(File.join(lib_dir, 'daemons.rb'))
4
4
  $LOAD_PATH.unshift lib_dir
@@ -13,4 +13,4 @@ options = {
13
13
  :ontop => true
14
14
  }
15
15
 
16
- Daemons.run(File.join(File.split(__FILE__)[0], 'myserver.rb'), options)
16
+ Daemons.run(File.join(File.dirname(__FILE__), 'myserver.rb'), options)
@@ -1,4 +1,4 @@
1
- lib_dir = File.expand_path(File.join(File.split(__FILE__)[0], '../../lib'))
1
+ lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
2
2
 
3
3
  if File.exists?(File.join(lib_dir, 'daemons.rb'))
4
4
  $LOAD_PATH.unshift lib_dir
@@ -0,0 +1,25 @@
1
+ ping from proc!
2
+ ping from proc!
3
+ ping from proc!
4
+ ping from proc!
5
+ ping from proc!
6
+ ping from proc!
7
+ ping from proc!
8
+ ping from proc!
9
+ ping from proc!
10
+ ping from proc!
11
+ ping from proc!
12
+ ping from proc!
13
+ ping from proc!
14
+ ping from proc!
15
+ ping from proc!
16
+ ping from proc!
17
+ ping from proc!
18
+ ping from proc!
19
+ ping from proc!
20
+ ping from proc!
21
+ ping from proc!
22
+ ping from proc!
23
+ ping from proc!
24
+ ping from proc!
25
+ ping from proc!
@@ -0,0 +1,17 @@
1
+ lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
2
+
3
+ if File.exists?(File.join(lib_dir, 'daemons.rb'))
4
+ $LOAD_PATH.unshift lib_dir
5
+ else
6
+ require 'rubygems' rescue nil
7
+ end
8
+
9
+ require 'daemons'
10
+
11
+
12
+ Daemons.run_proc('ctrl_proc_simple.rb') do
13
+ loop do
14
+ puts 'ping from proc!'
15
+ sleep(3)
16
+ end
17
+ end
@@ -4,5 +4,5 @@ loop do
4
4
 
5
5
  sleep(3)
6
6
 
7
- Process.exit!
8
- end
7
+ Process.exit
8
+ end
data/lib/daemons.rb CHANGED
@@ -65,7 +65,7 @@ require 'daemons/controller'
65
65
  #
66
66
  module Daemons
67
67
 
68
- VERSION = "1.0.1"
68
+ VERSION = "1.0.2"
69
69
 
70
70
  require 'daemons/daemonize'
71
71
 
@@ -92,7 +92,7 @@ module Daemons
92
92
  # <tt>:dir_mode</tt>:: Either <tt>:script</tt> (the directory for writing the pid files to
93
93
  # given by <tt>:dir</tt> is interpreted relative
94
94
  # to the script location given by +script+) or <tt>:normal</tt> (the directory given by
95
- # <tt>:dir</tt> is interpreted relative to the current directory) or <tt>:system</tt>
95
+ # <tt>:dir</tt> is interpreted as a (absolute or relative) path) or <tt>:system</tt>
96
96
  # (<tt>/var/run</tt> is used as the pid file directory)
97
97
  #
98
98
  # <tt>:dir</tt>:: Used in combination with <tt>:dir_mode</tt> (description above)
@@ -120,7 +120,7 @@ module Daemons
120
120
  # :script => "path/to/script.rb"
121
121
  # }
122
122
  #
123
- # Daemons.run(File.join(File.split(__FILE__)[0], 'myscript.rb'), options)
123
+ # Daemons.run(File.join(File.dirname(__FILE__), 'myscript.rb'), options)
124
124
  #
125
125
  def run(script, options = {})
126
126
  options[:script] = script
@@ -167,9 +167,10 @@ module Daemons
167
167
  options[:mode] = :proc
168
168
  options[:proc] = block
169
169
 
170
+ # we do not have a script location so the the :script option cannot be used, change it to :normal
170
171
  if [nil, :script].include? options[:dir_mode]
171
172
  options[:dir_mode] = :normal
172
- options[:dir] = File.split(__FILE__)[0]
173
+ options[:dir] = File.expand_path('.')
173
174
  end
174
175
 
175
176
  @controller = Controller.new(options, ARGV)
@@ -260,7 +261,6 @@ module Daemons
260
261
  @group ||= ApplicationGroup.new('self', options)
261
262
 
262
263
  @group.new_application(:mode => :none).start
263
-
264
264
  end
265
265
  module_function :daemonize
266
266
 
@@ -26,7 +26,7 @@ module Daemons
26
26
 
27
27
  unless @pid = pid
28
28
  if dir = pidfile_dir
29
- @pid = PidFile.new(pidfile_dir(), @group.app_name, @group.multiple)
29
+ @pid = PidFile.new(dir, @group.app_name, @group.multiple)
30
30
  else
31
31
  @pid = PidMem.new
32
32
  end
@@ -45,9 +45,11 @@ module Daemons
45
45
  (options[:log_output] && pidfile_dir()) ? File.join(pidfile_dir(), @group.app_name + '.output') : nil
46
46
  end
47
47
 
48
+
49
+ # this function is only used to daemonize the currently running process (Daemons.daemonize)
48
50
  def start_none
49
51
  unless options[:ontop]
50
- Daemonize.daemonize #(logfile)
52
+ Daemonize.daemonize(nil, @group.app_name) #(logfile)
51
53
  else
52
54
  Daemonize.simulate
53
55
  end
@@ -86,11 +88,12 @@ module Daemons
86
88
 
87
89
  def start_exec
88
90
  unless options[:ontop]
89
- Daemonize.daemonize(logfile)
91
+ Daemonize.daemonize(logfile, @group.app_name)
90
92
  else
91
93
  Daemonize.simulate(logfile)
92
94
  end
93
95
 
96
+ # note that we cannot remove the pid file if we run in :ontop mode (i.e. 'ruby ctrl_exec.rb run')
94
97
  @pid.pid = Process.pid
95
98
 
96
99
  ENV['DAEMONS_ARGV'] = @controller_argv.join(' ')
@@ -101,7 +104,7 @@ module Daemons
101
104
 
102
105
  def start_load
103
106
  unless options[:ontop]
104
- Daemonize.daemonize(logfile)
107
+ Daemonize.daemonize(logfile, @group.app_name)
105
108
  else
106
109
  Daemonize.simulate(logfile)
107
110
  end
@@ -137,7 +140,7 @@ module Daemons
137
140
  exit
138
141
  }
139
142
 
140
- # Know we really start the script...
143
+ # Now we really start the script...
141
144
  $DAEMONS_ARGV = @controller_argv
142
145
  ENV['DAEMONS_ARGV'] = @controller_argv.join(' ')
143
146
 
@@ -149,32 +152,71 @@ module Daemons
149
152
  end
150
153
 
151
154
  def start_proc
152
- return unless options[:proc]
155
+ return unless p = options[:proc]
156
+
157
+ myproc = proc do
158
+ # We need this to remove the pid-file if the applications exits by itself.
159
+ # Note that <tt>at_text</tt> will only be run if the applications exits by calling
160
+ # <tt>exit</tt>, and not if it calls <tt>exit!</tt> (so please don't call <tt>exit!</tt>
161
+ # in your application!
162
+ #
163
+ at_exit {
164
+ @pid.cleanup rescue nil
165
+
166
+ # If the option <tt>:backtrace</tt> is used and the application did exit by itself
167
+ # create a exception log.
168
+ if options[:backtrace] and not options[:ontop] and not $daemons_sigterm
169
+ exception_log() rescue nil
170
+ end
171
+
172
+ }
173
+
174
+ # This part is needed to remove the pid-file if the application is killed by
175
+ # daemons or manually by the user.
176
+ # Note that the applications is not supposed to overwrite the signal handler for
177
+ # 'TERM'.
178
+ #
179
+ trap('TERM') {
180
+ @pid.cleanup rescue nil
181
+ $daemons_sigterm = true
182
+
183
+ exit
184
+ }
185
+
186
+ p.call()
187
+ end
153
188
 
154
189
  unless options[:ontop]
155
- @pid.pid = Daemonize.call_as_daemon(options[:proc], logfile)
190
+ @pid.pid = Daemonize.call_as_daemon(myproc, logfile, @group.app_name)
156
191
  else
157
- # Daemonize.simulate(logfile)
158
- #
159
- # @pid.pid = Process.pid
160
- #
192
+ Daemonize.simulate(logfile)
193
+
194
+ @pid.pid = Process.pid
195
+
196
+ myproc.call
197
+
198
+ # why did we use this??
161
199
  # Thread.new(&options[:proc])
162
- unless @pid.pid = Process.fork
163
- Daemonize.simulate(logfile)
164
- options[:proc].call
165
- exit
166
- else
167
- Process.detach(@pid.pid)
168
- end
200
+
201
+ # why did we use the code below??
202
+ # unless pid = Process.fork
203
+ # @pid.pid = pid
204
+ # Daemonize.simulate(logfile)
205
+ # options[:proc].call
206
+ # exit
207
+ # else
208
+ # Process.detach(@pid.pid)
209
+ # end
169
210
  end
170
211
  end
171
212
 
172
213
 
173
214
  def start
174
- @group.create_monitor(@group.applications[0] || self)
215
+ @group.create_monitor(@group.applications[0] || self) unless options[:ontop] # we don't monitor applications in the foreground
175
216
 
176
217
  case options[:mode]
177
218
  when :none
219
+ # this is only used to daemonize the currently running process
178
220
  start_none
179
221
  when :exec
180
222
  start_exec
@@ -32,7 +32,7 @@ module Daemons
32
32
  @app_name ||= File.split(@script)[1]
33
33
  end
34
34
 
35
- @app_name = options[:app_name] if options[:app_name]
35
+ @app_name ||= 'unknown_application'
36
36
 
37
37
  @command, @controller_part, @app_part = Controller.split_argv(argv)
38
38
 
@@ -113,7 +113,7 @@ module Daemonize
113
113
 
114
114
 
115
115
  def simulate(logfile_name = nil)
116
- # NOTE: STDOUT and STDERR will not be redirected to the logfile!
116
+ # NOTE: STDOUT and STDERR will not be redirected to the logfile, because in :ontop mode, we normally want to see the output
117
117
 
118
118
  Dir.chdir "/" # Release old working directory
119
119
  File.umask 0000 # Insure sensible umask
@@ -139,7 +139,7 @@ module Daemonize
139
139
  module_function :simulate
140
140
 
141
141
 
142
- def call_as_daemon(block, logfile_name = nil, oldmode = 0)
142
+ def call_as_daemon(block, logfile_name = nil, app_name = nil)
143
143
  rd, wr = IO.pipe
144
144
 
145
145
  if tmppid = safefork
@@ -152,6 +152,8 @@ module Daemonize
152
152
 
153
153
  return pid
154
154
  else
155
+ # child
156
+
155
157
  rd.close
156
158
 
157
159
  # Detach from the controlling terminal
@@ -160,14 +162,16 @@ module Daemonize
160
162
  end
161
163
 
162
164
  # Prevent the possibility of acquiring a controlling terminal
163
- if oldmode.zero?
165
+ #if oldmode.zero?
164
166
  trap 'SIGHUP', 'IGNORE'
165
167
  exit if pid = safefork
166
- end
168
+ #end
167
169
 
168
170
  wr.write Process.pid
169
171
  wr.close
170
172
 
173
+ $0 = app_name if app_name
174
+
171
175
  Dir.chdir "/" # Release old working directory
172
176
  File.umask 0000 # Insure sensible umask
173
177
 
@@ -210,7 +214,7 @@ module Daemonize
210
214
 
211
215
 
212
216
  # This method causes the current running process to become a daemon
213
- def daemonize(logfile_name = nil, oldmode=0)
217
+ def daemonize(logfile_name = nil, app_name = nil)
214
218
  srand # Split rand streams between spawning and daemonized process
215
219
  safefork and exit # Fork and exit from the parent
216
220
 
@@ -220,11 +224,13 @@ module Daemonize
220
224
  end
221
225
 
222
226
  # Prevent the possibility of acquiring a controlling terminal
223
- if oldmode.zero?
227
+ #if oldmode.zero?
224
228
  trap 'SIGHUP', 'IGNORE'
225
229
  exit if pid = safefork
226
- end
230
+ #end
227
231
 
232
+ $0 = app_name if app_name
233
+
228
234
  Dir.chdir "/" # Release old working directory
229
235
  File.umask 0000 # Insure sensible umask
230
236
 
@@ -258,7 +264,8 @@ module Daemonize
258
264
 
259
265
  STDERR.reopen STDOUT rescue nil
260
266
 
261
- return oldmode ? sess_id : 0 # Return value is mostly irrelevant
267
+ #return oldmode ? sess_id : 0 # Return value is mostly irrelevant
268
+ return sess_id
262
269
  end
263
270
  module_function :daemonize
264
271
 
data/lib/daemons/pid.rb CHANGED
@@ -1,72 +1,75 @@
1
-
2
- module Daemons
3
-
4
- class Pid
5
-
6
- def Pid.running?(pid, additional = nil)
7
- match_pid = Regexp.new("^\\s*#{pid}\\s")
8
- got_match = false
9
-
10
- ps_all = IO.popen("ps -ax")
11
- ps_all.each { |psline|
12
- next unless psline =~ match_pid
13
- got_match = true
14
- got_match = false if additional and psline !~ /#{additional}/
15
- break
16
- }
17
- ps_all.close
18
-
19
- return got_match
20
- end
21
-
22
-
23
- # Returns the directory that should be used to write the pid file to
24
- # depending on the given mode.
25
- #
26
- # Some modes may require an additionaly hint, others may determine
27
- # the directory automatically.
28
- #
29
- # If no valid directory is found, returns nil.
30
- #
31
- def Pid.dir(dir_mode, dir, script)
32
- # nil script parameter is allowed so long as dir_mode is not :script
33
- return nil if dir_mode == :script && script.nil?
34
-
35
- case dir_mode
36
- when :normal
37
- return File.expand_path(dir)
38
- when :script
39
- return File.expand_path(File.join(File.split(script)[0],dir))
40
- when :system
41
- return '/var/run'
42
- else
43
- raise Error.new("pid file mode '#{dir_mode}' not implemented")
44
- end
45
- end
46
-
47
- # Initialization method
48
- def initialize
49
- end
50
-
51
-
52
- # Get method
53
- def pid
54
- end
55
-
56
- # Set method
57
- def pid=(p)
58
- end
59
-
60
- # Cleanup method
61
- def cleanup
62
- end
63
-
64
- # Exists? method
65
- def exists?
66
- true
67
- end
68
-
69
- end
70
-
71
-
1
+
2
+ module Daemons
3
+
4
+ class Pid
5
+
6
+ def Pid.running?(pid, additional = nil)
7
+ match_pid = Regexp.new("^\\s*#{pid}\\s")
8
+ got_match = false
9
+
10
+ ps_all = IO.popen("ps ax") # the correct syntax is without a dash (-) !
11
+ ps_all.each { |psline|
12
+ next unless psline =~ match_pid
13
+ got_match = true
14
+ got_match = false if additional and psline !~ /#{additional}/
15
+ break
16
+ }
17
+ ps_all.close
18
+
19
+ # an alternative would be to use the code below, but I don't know whether this is portable
20
+ # `ps axo pid=`.split.include? pid.to_s
21
+
22
+ return got_match
23
+ end
24
+
25
+
26
+ # Returns the directory that should be used to write the pid file to
27
+ # depending on the given mode.
28
+ #
29
+ # Some modes may require an additionaly hint, others may determine
30
+ # the directory automatically.
31
+ #
32
+ # If no valid directory is found, returns nil.
33
+ #
34
+ def Pid.dir(dir_mode, dir, script)
35
+ # nil script parameter is allowed as long as dir_mode is not :script
36
+ return nil if dir_mode == :script && script.nil?
37
+
38
+ case dir_mode
39
+ when :normal
40
+ return File.expand_path(dir)
41
+ when :script
42
+ return File.expand_path(File.join(File.dirname(script),dir))
43
+ when :system
44
+ return '/var/run'
45
+ else
46
+ raise Error.new("pid file mode '#{dir_mode}' not implemented")
47
+ end
48
+ end
49
+
50
+ # Initialization method
51
+ def initialize
52
+ end
53
+
54
+
55
+ # Get method
56
+ def pid
57
+ end
58
+
59
+ # Set method
60
+ def pid=(p)
61
+ end
62
+
63
+ # Cleanup method
64
+ def cleanup
65
+ end
66
+
67
+ # Exists? method
68
+ def exists?
69
+ true
70
+ end
71
+
72
+ end
73
+
74
+
72
75
  end
@@ -25,9 +25,9 @@ module Daemons
25
25
  #
26
26
  # Daemons is configurable to store the Pid-Files relative to three different locations:
27
27
  # 1. in a directory relative to the directory where the script (the one that is supposed to run
28
- # as a daemon) resides
29
- # 2. in a directory relative to the current directory or the filesystem root
30
- # 3. in the preconfigured directory <tt>/var/run</tt>
28
+ # as a daemon) resides (<tt>:script</tt> option for <tt>:dir_mode</tt>)
29
+ # 2. in a directory given by <tt>:dir</tt> (<tt>:normal</tt> option for <tt>:dir_mode</tt>)
30
+ # 3. in the preconfigured directory <tt>/var/run</tt> (<tt>:system</tt> option for <tt>:dir_mode</tt>)
31
31
  #
32
32
  class PidFile < Pid
33
33
 
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: daemons
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.0.1
7
- date: 2006-08-30 00:00:00 +02:00
6
+ version: 1.0.2
7
+ date: 2006-10-04 00:00:00 +02:00
8
8
  summary: A toolkit to create and control daemons in different ways
9
9
  require_paths:
10
10
  - lib
@@ -66,6 +66,7 @@ files:
66
66
  - examples/run/ctrl_proc.output
67
67
  - examples/run/ctrl_proc.rb
68
68
  - examples/run/ctrl_proc.rb.output
69
+ - examples/run/ctrl_proc_simple.rb
69
70
  - examples/run/myserver.rb
70
71
  - examples/run/myserver_crashing.rb
71
72
  - examples/run/myserver_crashing.rb.output