让 Puppet 代理自行重启

让 Puppet 代理自行重启

我有一个通知傀儡代理的文件。

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"],
               ]
}

相关内容