basic_daemon 0.9.1 → 1.0.0
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.rdoc +35 -17
- data/Rakefile +0 -1
- data/examples/functional.rb +2 -0
- data/lib/basic_daemon.rb +27 -22
- metadata +11 -5
- data/History.rdoc +0 -57
data/README.rdoc
CHANGED
@@ -1,21 +1,28 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
= BasicDaemon
|
2
|
+
|
3
|
+
http://github.com/samullen/basic_daemon
|
3
4
|
|
4
|
-
|
5
|
+
A basic library for creating daemonized processes
|
5
6
|
|
6
7
|
This library works with Ruby 1.8, Ruby 1.9, and JRuby and is licensed under the MIT License.
|
7
8
|
|
8
|
-
Installation
|
9
|
+
== Installation
|
9
10
|
|
10
|
-
|
11
|
+
The basic_daemon gem is hosted on GemCutter (http://gemcutter.org). This
|
12
|
+
requires that you have http://gemcutter.org in your gem sources.
|
11
13
|
|
12
|
-
|
14
|
+
Install the basic_daemon gem:
|
13
15
|
|
14
|
-
|
16
|
+
sudo gem install basic_daemon
|
15
17
|
|
16
|
-
|
18
|
+
== Gettings Started
|
17
19
|
|
18
|
-
|
20
|
+
There are currently two ways of using the basic_daemon library: 1) Objected
|
21
|
+
Oriented; 2) Functional.
|
22
|
+
|
23
|
+
=== Object Oriented
|
24
|
+
|
25
|
+
The basic idea here is to subclass BasicDaemon and overwride the "run" method.
|
19
26
|
|
20
27
|
require 'basic_daemon'
|
21
28
|
|
@@ -49,7 +56,7 @@ The basic idea here is to subclass BasicDaemon and overwrite the "run" method.
|
|
49
56
|
exit!
|
50
57
|
end
|
51
58
|
|
52
|
-
Functional
|
59
|
+
=== Functional
|
53
60
|
|
54
61
|
Rather than subclassing BasicDaemon, a block is just passed to the start method.
|
55
62
|
|
@@ -57,8 +64,7 @@ Rather than subclassing BasicDaemon, a block is just passed to the start method.
|
|
57
64
|
|
58
65
|
daemon = BasicDaemon.new
|
59
66
|
|
60
|
-
|
61
|
-
daemon.start do
|
67
|
+
process = Proc.new do
|
62
68
|
foo = open("/tmp/out", "w")
|
63
69
|
|
64
70
|
i = 1
|
@@ -71,24 +77,36 @@ Rather than subclassing BasicDaemon, a block is just passed to the start method.
|
|
71
77
|
i += 1
|
72
78
|
end
|
73
79
|
end
|
80
|
+
|
81
|
+
if ARGV[0] == 'start'
|
82
|
+
daemon.start &process
|
74
83
|
elsif ARGV[0] == 'stop'
|
75
84
|
daemon.stop
|
76
85
|
exit!
|
77
86
|
elsif ARGV[0] == 'restart'
|
78
|
-
daemon.restart
|
87
|
+
daemon.restart &process
|
79
88
|
else
|
80
89
|
STDERR.puts "Usage: foo_daemon.rb <start|stop|restart>"
|
81
90
|
exit!
|
82
91
|
end
|
83
92
|
|
84
|
-
Arguments
|
93
|
+
=== Arguments
|
85
94
|
|
86
|
-
BasicDaemon creates file to store the process ID (PID). By default, this file
|
95
|
+
BasicDaemon creates file to store the process ID (PID). By default, this file
|
96
|
+
is given the same name as the calling script sans the file extension and is
|
97
|
+
stored in the /tmp directory. Also by default, the directory the calling script
|
98
|
+
is working in is changed to the root directory ('/').
|
87
99
|
|
88
|
-
Each argument, :pidfile, :piddir, :workingdir, can be changed upon
|
100
|
+
Each argument, :pidfile, :piddir, :workingdir, can be changed upon
|
101
|
+
instantiation of the class.
|
89
102
|
|
90
|
-
Example:
|
103
|
+
==== Example:
|
91
104
|
|
92
105
|
Most Linux users will want to instantiate thusly:
|
93
106
|
|
94
107
|
BasicDaemon.new(:piddir => '/var/lock')
|
108
|
+
|
109
|
+
== Copyright
|
110
|
+
|
111
|
+
Copyright(c) 2009 Samuel Mullen (samullen). See LICENSE for details
|
112
|
+
|
data/Rakefile
CHANGED
data/examples/functional.rb
CHANGED
@@ -7,6 +7,8 @@ pidfile = File.basename($PROGRAM_NAME, File.extname($PROGRAM_NAME))
|
|
7
7
|
|
8
8
|
d = BasicDaemon.new({:pidfile => pidfile, :piddir => basedir, :workingdir => basedir})
|
9
9
|
|
10
|
+
# for restarts to work properly, you can't use anonymous blocks. In other
|
11
|
+
# words, blocks have to be assigned to a variable
|
10
12
|
process = Proc.new do
|
11
13
|
i = 1
|
12
14
|
foo = open(basedir + "/out", "w")
|
data/lib/basic_daemon.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
class BasicDaemon
|
2
2
|
attr_accessor :workingdir, :pidfile, :piddir, :process
|
3
3
|
|
4
|
-
VERSION = '0.
|
4
|
+
VERSION = '1.0.0'
|
5
5
|
|
6
6
|
DEFAULT_OPTIONS = {
|
7
7
|
:pidfile => File.basename($PROGRAM_NAME, File.extname($PROGRAM_NAME)),
|
@@ -9,14 +9,14 @@ class BasicDaemon
|
|
9
9
|
:workingdir => '/'
|
10
10
|
}
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
12
|
+
# Instantiate a new BasicDaemon
|
13
|
+
#
|
14
|
+
# Takes an optional hash with the following symbol keys:
|
15
|
+
# - :piddir = Directory to store the PID file in. Default is /tmp
|
16
|
+
# - :pidfile = name of the file to store the PID in. default is the script
|
17
|
+
# name sans extension.
|
18
|
+
# - :workingdir = Directory to work from. Default is "/" and should probably
|
19
|
+
# be left as such.
|
20
20
|
def initialize(*args)
|
21
21
|
opts = {}
|
22
22
|
|
@@ -77,22 +77,13 @@ class BasicDaemon
|
|
77
77
|
fork && exit!
|
78
78
|
|
79
79
|
at_exit do
|
80
|
-
|
80
|
+
remove_pidfile
|
81
81
|
end
|
82
82
|
|
83
83
|
Dir::chdir(@workingdir) #----- chdir to working directory
|
84
84
|
File::umask(0) #----- clear out file mode creation mask
|
85
85
|
|
86
|
-
|
87
|
-
open(self.pidpath, "w") do |f|
|
88
|
-
@pid = Process.pid
|
89
|
-
f.puts @pid
|
90
|
-
end
|
91
|
-
rescue => e
|
92
|
-
STDERR.puts "Error: Unable to open #{self.pidpath} for writing:\n\t" +
|
93
|
-
"(#{e.class}) #{e.message}"
|
94
|
-
exit!
|
95
|
-
end
|
86
|
+
create_pidfile
|
96
87
|
|
97
88
|
STDIN.reopen("/dev/null", 'r')
|
98
89
|
STDOUT.reopen("/dev/null", "w")
|
@@ -169,8 +160,22 @@ class BasicDaemon
|
|
169
160
|
|
170
161
|
private
|
171
162
|
|
172
|
-
|
173
|
-
def
|
163
|
+
# Writes the process ID to the pidfile and defines @pid as such
|
164
|
+
def create_pidfile
|
165
|
+
begin
|
166
|
+
open(self.pidpath, "w") do |f|
|
167
|
+
@pid = Process.pid
|
168
|
+
f.puts @pid
|
169
|
+
end
|
170
|
+
rescue => e
|
171
|
+
STDERR.puts "Error: Unable to open #{self.pidpath} for writing:\n\t" +
|
172
|
+
"(#{e.class}) #{e.message}"
|
173
|
+
exit!
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
# removes the pidfile. Called on exit
|
178
|
+
def remove_pidfile
|
174
179
|
begin
|
175
180
|
File.unlink(self.pidpath)
|
176
181
|
rescue => e
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: basic_daemon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
version: 1.0.0
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Samuel Mullen
|
@@ -22,7 +27,6 @@ extensions: []
|
|
22
27
|
extra_rdoc_files: []
|
23
28
|
|
24
29
|
files:
|
25
|
-
- History.rdoc
|
26
30
|
- LICENSE
|
27
31
|
- README.rdoc
|
28
32
|
- Rakefile
|
@@ -45,18 +49,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
45
49
|
requirements:
|
46
50
|
- - ">="
|
47
51
|
- !ruby/object:Gem::Version
|
52
|
+
segments:
|
53
|
+
- 0
|
48
54
|
version: "0"
|
49
|
-
version:
|
50
55
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
51
56
|
requirements:
|
52
57
|
- - ">="
|
53
58
|
- !ruby/object:Gem::Version
|
59
|
+
segments:
|
60
|
+
- 0
|
54
61
|
version: "0"
|
55
|
-
version:
|
56
62
|
requirements: []
|
57
63
|
|
58
64
|
rubyforge_project:
|
59
|
-
rubygems_version: 1.3.
|
65
|
+
rubygems_version: 1.3.6
|
60
66
|
signing_key:
|
61
67
|
specification_version: 3
|
62
68
|
summary: A simple ruby library for daemonizing processes
|
data/History.rdoc
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
= 0.9.0 - 20100216
|
2
|
-
|
3
|
-
* Bumped the version to 0.9.0 because it's just about ready for a 1.0 release.
|
4
|
-
* cleaned up tests and added a restart test to oo and function
|
5
|
-
* Still need to work on documentation and fix the Rakefile
|
6
|
-
|
7
|
-
= 0.1.5 - 20100118
|
8
|
-
|
9
|
-
Doing some refactoring and broke out code which determines the PID into its
|
10
|
-
own method "pid".
|
11
|
-
|
12
|
-
Added LICENSE and updated TODO
|
13
|
-
|
14
|
-
Updated Rakefile and tests
|
15
|
-
|
16
|
-
= 0.1.4 - 20100115
|
17
|
-
|
18
|
-
Provided basic documentation for the methods.
|
19
|
-
|
20
|
-
= 0.1.3 - 20091230
|
21
|
-
|
22
|
-
Breaking out tests
|
23
|
-
|
24
|
-
* Broke out tests to organize by functionality
|
25
|
-
|
26
|
-
= 0.1.2 - 20091230
|
27
|
-
|
28
|
-
Switched back to Test::Unit
|
29
|
-
|
30
|
-
* Migrated all RSpec tests to Test::Unit
|
31
|
-
* Expanded tests to handle calling blocks
|
32
|
-
|
33
|
-
= 0.1.1 - 20090925
|
34
|
-
|
35
|
-
RSpec testing expansion.
|
36
|
-
|
37
|
-
* continuing to add tests to the spec.
|
38
|
-
* added a method to the library to determine if a PID is alive
|
39
|
-
|
40
|
-
= 0.1.0 - 20090923
|
41
|
-
|
42
|
-
Major bug fixes
|
43
|
-
|
44
|
-
* The daemon now correctly forks off from the calling process.
|
45
|
-
* The procedural means of executing a daemon have been eliminated.
|
46
|
-
|
47
|
-
= 0.0.5 - 20090921
|
48
|
-
|
49
|
-
Began moving tests to RSpec.
|
50
|
-
|
51
|
-
= 0.0.5 - 20090812
|
52
|
-
|
53
|
-
Started recording changes to the repository in to line up with git commit
|
54
|
-
messages.
|
55
|
-
|
56
|
-
* addition of License.txt and History.txt, though mostly empty
|
57
|
-
* Initial gemspec was created. The daemon is now gemable
|