我有一个通知傀儡代理的文件。
在network
模块中,代理设置包含在.gemrc文件中,如下所示:
file { "/root/.gemrc":
content => "http_proxy: $http_proxy\n",
notify => Service['puppet'],
}
问题是 Puppet 停止了并且没有重新启动。
Aug 31 12:05:13 snch7log01 puppet-agent[1117]: (/Stage[main]/Network/File[/root/.gemrc]/content) content changed '{md5}2b00042f7481c7b056c4b410d28f33cf' to '{md5}60b725f10c9c85c70d97880dfe8191b3'
Aug 31 12:05:13 snch7log01 puppet-agent[1117]: Caught TERM; calling stop
我假设代码会做一些类似的事情,/etc/init.d/puppet stop && /etc/init.d/puppet start
因为 puppet 没有运行,它无法自行启动...这有点道理。
当此文件更改时,如何让 puppet 自行重新启动?请注意,此文件也可能不存在。
答案1
您可能需要添加到“puppet”的服务资源声明中:
hasrestart => true,
答案2
除了确保清单中包含“hasrestart”之外,您还应确保
"ensure => running"
在清单中。这是我的副本:
class puppet::service {
service { puppet:
ensure => running,
enable => true,
hasrestart => true,
subscribe => File["/etc/puppet/puppet.conf"],
}
}
答案3
我遇到了类似的问题。我需要部署 augeas 的修复程序,并使用 puppet 来部署它们,但它们直到重新启动 puppetd 才会生效。所以我需要一种快速简便的方法来告诉 puppetd 重新启动一次。我使用 shell 脚本和 exec 解决了这个问题。
脚本如下:
#!/bin/bash
if [ X"$1" != Xbackground ]; then
OUTDIR=/var/log/puppet
mkdir -p $OUTDIR
nohup $0 background > $OUTDIR/puppet_restart.out 2>&1 < /dev/null &
exit 0
fi
# If you get here, this is a background copy of this script that has
# been decoupled from puppet by the nohup above. Give puppet a chance
# to finish what it is doing, then restart it.
sleep 60
/sbin/service puppet restart
运行脚本的清单会利用其创建的日志文件。(第一次使用时效果很好 - 如果您进行后续更新,请制作一个将删除日志文件的清单,以便再次运行该脚本):
file { "/usr/local/bin/puppet_restart":
owner => root,
group => root,
mode => 750,
source => "puppet:///modules/puppet_fix_module/puppet_restart"
}
exec { "restart_puppet":
command => "/usr/local/bin/puppet_restart",
path => ["/usr/bin", "/usr/sbin", "/bin"],
creates => "/var/log/puppet/puppet_restart.out",
require => [ File['/usr/local/bin/puppet_restart'],
File ["/some/other/file/that/requires/restart"],
]
}