48 lines
1,003 B
Ruby
Executable file
48 lines
1,003 B
Ruby
Executable file
#!/usr/bin/env ruby
|
|
|
|
require "puppet"
|
|
require "socket"
|
|
|
|
Puppet.parse_config
|
|
|
|
if Puppet.version[/\d+/].to_i >= 2
|
|
puppetd = "puppet agent"
|
|
pidname = "agent.pid"
|
|
else
|
|
puppetd = "puppetd"
|
|
pidname = "puppetd.pid"
|
|
end
|
|
|
|
# get pid number for puppet or exit if not found
|
|
pidfile = File.join(Puppet.settings.value("rundir"), pidname)
|
|
begin
|
|
pid = File.new(pidfile, "r").read.to_i
|
|
rescue Errno::ENOENT
|
|
exit
|
|
end
|
|
|
|
# check that process is still alive
|
|
begin
|
|
Process.kill(0, pid)
|
|
|
|
# check memory usage and restart if over 256M
|
|
rss = `ps -o rss= -p '#{pid}'`.to_i / 1024
|
|
if rss > 256
|
|
printf("puppetd memory usage too high (%d MB), on host '%s' sending HUP\n",
|
|
rss, Socket.gethostname)
|
|
Process.kill("HUP", pid)
|
|
end
|
|
|
|
exit
|
|
rescue Errno::ESRCH
|
|
nil
|
|
end
|
|
|
|
# restart
|
|
printf("puppetd dead but pid file exists on host '%s', restarting\n",
|
|
Socket.gethostname)
|
|
begin
|
|
exec("service puppet start")
|
|
rescue Errno::ENOENT
|
|
exec(puppetd)
|
|
end
|