blob: 24d74376462eada3b65e5826f28d91fd73dc4726 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
require 'puppet'
require 'puppet/util/pidlock'
# A module that handles operations common to all daemons. This is included
# into the Server and Client base classes.
module Puppet::Daemon
include Puppet::Util
def daemonname
Puppet[:name]
end
# Put the daemon into the background.
def daemonize
if pid = fork()
Process.detach(pid)
exit(0)
end
setpidfile()
# Get rid of console logging
Puppet::Util::Log.close(:console)
Process.setsid
Dir.chdir("/")
begin
$stdin.reopen "/dev/null"
$stdout.reopen "/dev/null", "a"
$stderr.reopen $stdout
Puppet::Util::Log.reopen
rescue => detail
File.open("/tmp/daemonout", "w") { |f|
f.puts "Could not start %s: %s" % [Puppet[:name], detail]
}
Puppet.err "Could not start %s: %s" % [Puppet[:name], detail]
exit(12)
end
end
# The path to the pid file for this server
def pidfile
if Puppet[:pidfile] != ""
Puppet[:pidfile]
else
File.join(Puppet[:rundir], daemonname() + ".pid")
end
end
# Remove the pid file
def rmpidfile
threadlock(:pidfile) do
locker = Puppet::Util::Pidlock.new(pidfile)
if locker.locked?
locker.unlock or Puppet.err "Could not remove PID file %s" % [pidfile]
end
end
end
# Create the pid file.
def setpidfile
threadlock(:pidfile) do
unless Puppet::Util::Pidlock.new(pidfile).lock
Puppet.err("Could not create PID file: %s" % [pidfile])
exit(74)
end
end
end
# Shut down our server
def shutdown
# Remove our pid file
rmpidfile()
# And close all logs except the console.
Puppet::Util::Log.destinations.reject { |d| d == :console }.each do |dest|
Puppet::Util::Log.close(dest)
end
super
end
end
|