daemons 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -1,4 +1,4 @@
1
- = Daemons Version 1.0.3
1
+ = Daemons Version 1.0.4
2
2
 
3
3
  (See Releases for release-specific information)
4
4
 
@@ -184,7 +184,7 @@ The RDoc documentation is also online at http://daemons.rubyforge.org
184
184
 
185
185
  == Author
186
186
 
187
- Written in 2005 by Thomas Uehlinger <mailto:th.uehlinger@gmx.ch>.
187
+ Written in 2005-2007 by Thomas Uehlinger <mailto:th.uehlinger@gmx.ch>.
188
188
  Homepage: http://physiker.ch
189
189
 
190
190
  == License
data/Releases CHANGED
@@ -1,5 +1,11 @@
1
1
  = Daemons Release History
2
2
 
3
+ == Release 1.0.4: January 17, 2007
4
+
5
+ * Document the :log_output option (thanks to Andrew Kuklewicz).
6
+ * Set STDOUT.sync = true when redirecting to a logfile (thanks to Andrew Kuklewicz).
7
+ * Should now run also correctly when there is no working 'ps ax' on the system (thanks to Daniel Kehoe).
8
+
3
9
  == Release 1.0.3: November 1, 2006
4
10
 
5
11
  * Set the app_name correctly also for the monitor process (thanks to Ilya Novoselov).
@@ -4,22 +4,3 @@ ping from proc!
4
4
  ping from proc!
5
5
  ping from proc!
6
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!
@@ -65,7 +65,7 @@ require 'daemons/controller'
65
65
  #
66
66
  module Daemons
67
67
 
68
- VERSION = "1.0.3"
68
+ VERSION = "1.0.4"
69
69
 
70
70
  require 'daemons/daemonize'
71
71
 
@@ -98,13 +98,16 @@ module Daemons
98
98
  # <tt>:dir</tt>:: Used in combination with <tt>:dir_mode</tt> (description above)
99
99
  # <tt>:multiple</tt>:: Specifies whether multiple instances of the same script are allowed to run at the
100
100
  # same time
101
- # <tt>:ontop</tt>:: When given, stay on top, i.e. do not daemonize the application
101
+ # <tt>:ontop</tt>:: When given (i.e. set to true), stay on top, i.e. do not daemonize the application
102
102
  # (but the pid-file and other things are written as usual)
103
103
  # <tt>:mode</tt>:: <tt>:load</tt> Load the script with <tt>Kernel.load</tt>;
104
104
  # <tt>:exec</tt> Execute the script file with <tt>Kernel.exec</tt>
105
105
  # <tt>:backtrace</tt>:: Write a backtrace of the last exceptions to the file '[app_name].log' in the
106
106
  # pid-file directory if the application exits due to an uncaught exception
107
107
  # <tt>:monitor</tt>:: Monitor the programs and restart crashed instances
108
+ # <tt>:log_output</tt>:: When given (i.e. set to true), redirect both STDOUT and STDERR to a logfile
109
+ # named '[app_name].output' in the pid-file directory
110
+ #
108
111
  # -----
109
112
  #
110
113
  # === Example:
@@ -187,23 +187,7 @@ module Daemonize
187
187
  end
188
188
  end
189
189
 
190
- # Free file descriptors and
191
- # point them somewhere sensible
192
- # STDOUT/STDERR should go to a logfile
193
-
194
- STDIN.reopen "/dev/null" rescue nil
195
-
196
- if logfile_name
197
- begin
198
- STDOUT.reopen logfile_name, "a"
199
- rescue ::Exception
200
- STDOUT.reopen "/dev/null" rescue nil
201
- end
202
- else
203
- STDOUT.reopen "/dev/null" rescue nil
204
- end
205
-
206
- STDERR.reopen STDOUT rescue nil
190
+ redirect_io(logfile_name)
207
191
 
208
192
  block.call
209
193
 
@@ -246,27 +230,34 @@ module Daemonize
246
230
  end
247
231
  end
248
232
 
249
- # Free file descriptors and
250
- # point them somewhere sensible
251
- # STDOUT/STDERR should go to a logfile
233
+ redirect_io(logfile_name)
252
234
 
235
+ #return oldmode ? sess_id : 0 # Return value is mostly irrelevant
236
+ return sess_id
237
+ end
238
+ module_function :daemonize
239
+
240
+
241
+ # Free file descriptors and
242
+ # point them somewhere sensible
243
+ # STDOUT/STDERR should go to a logfile
244
+ def redirect_io(logfile_name)
253
245
  STDIN.reopen "/dev/null" rescue nil
254
-
246
+
255
247
  if logfile_name
256
248
  begin
257
249
  STDOUT.reopen logfile_name, "a"
250
+ STDOUT.sync = true
258
251
  rescue ::Exception
259
252
  STDOUT.reopen "/dev/null" rescue nil
260
253
  end
261
254
  else
262
255
  STDOUT.reopen "/dev/null" rescue nil
263
256
  end
264
-
265
- STDERR.reopen STDOUT rescue nil
266
257
 
267
- #return oldmode ? sess_id : 0 # Return value is mostly irrelevant
268
- return sess_id
258
+ STDERR.reopen STDOUT rescue nil
259
+ STDERR.sync = true
269
260
  end
270
- module_function :daemonize
261
+ module_function :redirect_io
271
262
 
272
263
  end
@@ -1,3 +1,5 @@
1
+ require 'open3'
2
+
1
3
 
2
4
  module Daemons
3
5
 
@@ -6,16 +8,23 @@ module Daemons
6
8
  def Pid.running?(pid, additional = nil)
7
9
  match_pid = Regexp.new("^\\s*#{pid}\\s")
8
10
  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
-
11
+
12
+ #ps_all = IO.popen('ps ax') # the correct syntax is without a dash (-) !
13
+ ps_in, ps_out, ps_err = Open3.popen3('ps ax') # the correct syntax is without a dash (-) !
14
+
15
+ return true unless ps_out.gets
16
+
17
+ begin
18
+ ps_out.each { |psline|
19
+ next unless psline =~ match_pid
20
+ got_match = true
21
+ got_match = false if additional and psline !~ /#{additional}/
22
+ break
23
+ }
24
+ ensure
25
+ ps_in.close rescue nil; ps_out.close rescue nil; ps_err.close rescue nil
26
+ end
27
+
19
28
  # an alternative would be to use the code below, but I don't know whether this is portable
20
29
  # `ps axo pid=`.split.include? pid.to_s
21
30
 
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.3
7
- date: 2006-11-02 00:00:00 +01:00
6
+ version: 1.0.4
7
+ date: 2007-01-17 00:00:00 +01:00
8
8
  summary: A toolkit to create and control daemons in different ways
9
9
  require_paths:
10
10
  - lib