运行 puppet apply 时,Puppet 不启动服务(清漆)

Posted

技术标签:

【中文标题】运行 puppet apply 时,Puppet 不启动服务(清漆)【英文标题】:Puppet does not start a service (varnish) when puppet apply is run 【发布时间】:2013-01-30 15:19:45 【问题描述】:

我有一个 puppet 清单,它指出服务“varnish”应该正在运行,但事实并非如此。

我定义了另一个服务 apache2,它运行良好,并且在我运行 puppet apply 时开始运行。

vagrant@lucid32:~$ sudo netstat -tunelp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      0          3749        605/sshd        
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      1000       5169        1110/0          
tcp        0      0 0.0.0.0:48828           0.0.0.0:*               LISTEN      0          3445        552/rpc.statd   
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      0          3228        484/portmap     
tcp6       0      0 :::22                   :::*                    LISTEN      0          3751        605/sshd        
tcp6       0      0 ::1:6010                :::*                    LISTEN      1000       5168        1110/0          
udp        0      0 0.0.0.0:68              0.0.0.0:*                           0          4179        917/dhclient    
udp        0      0 0.0.0.0:68              0.0.0.0:*                           0          3277        558/dhclient3   
udp        0      0 0.0.0.0:728             0.0.0.0:*                           0          3430        552/rpc.statd   
udp        0      0 0.0.0.0:111             0.0.0.0:*                           0          3227        484/portmap     
udp        0      0 0.0.0.0:54265           0.0.0.0:*                           0          3442        552/rpc.statd   
udp        0      0 10.0.2.15:123           0.0.0.0:*                           102        4259        904/ntpd        
udp        0      0 127.0.0.1:123           0.0.0.0:*                           0          4208        904/ntpd        
udp        0      0 0.0.0.0:123             0.0.0.0:*                           0          4203        904/ntpd        
udp6       0      0 fe80::a00:27ff:feb5:123 :::*                                0          4210        904/ntpd        
udp6       0      0 ::1:123                 :::*                                0          4209        904/ntpd        
udp6       0      0 :::123                  :::*                                0          4204        904/ntpd        
vagrant@lucid32:~$ 

应用木偶:

vagrant@lucid32:~$ sudo puppet apply --verbose /vagrant/manifests/default.pp 
info: Applying configuration version '1359558916'
notice: /Stage[main]/Apachevarnish/Service[apache2]/ensure: ensure changed 'stopped' to 'running'
notice: Finished catalog run in 0.15 seconds

但是清漆没有启动。

这是清单文件:

  class apachevarnish 


  Package  ensure => "installed" 

  package  "apache2": 
  package  "varnish": 

  file  '/etc/hosts':
    ensure => link,
    target => "/vagrant/hosts",
    force  => true
  

  file  '/var/www':
    ensure => link,
    target => "/vagrant",
    notify => Service['apache2'],
    force  => true
  

  file  '/etc/varnish':
    ensure => link,
    target => "/vagrant/etc/varnish",
    # notify => Service['varnish'],
    force  => true
  


  service  "varnish":
    ensure => running,
    require => Package["varnish"],
  


  service  "apache2":
    ensure => running,
    require => Package["apache2"],
  


谢谢!

【问题讨论】:

【参考方案1】:

回答我自己的问题:

据此:https://projects.puppetlabs.com/issues/12773 问题在于 Ubuntu 初始化脚本,或者“服务”命令没有返回正确的退出代码。

解决方案是使用 grep 和 service 设置自定义状态检查。

  service  "varnish":
    ensure => running,
    enable  => true,
    hasrestart => true,
    hasstatus => true,
    status => '/usr/sbin/service  varnish status | grep "is running"',
    require => Package["varnish"],
  

【讨论】:

【参考方案2】:

文档说 puppet 期望服务的 initscript 有一个“状态”命令,如果服务正在运行,则返回 0,否则返回非零值。这是 puppet 的默认行为。尝试做一个

$> sudo service <service_name> status
$> echo $? //Make sure you are getting the correct return values that puppet expects.

如果您的 initscript 没有为您提供所需的返回类型,请在服务指令块中设置“hasstatus => false”,然后尝试一下。

【讨论】:

【参考方案3】:

这工作正常:

  service  $service:
    ensure     => running,
    enable     => true,
    status     => "/usr/sbin/service  $service status",
    require    => Package["$service"],
  

【讨论】:

以上是关于运行 puppet apply 时,Puppet 不启动服务(清漆)的主要内容,如果未能解决你的问题,请参考以下文章

Puppet:安装 gem 包时如何重新加载环境 - rbenv 版本未激活

第二十二周微职位puppet

puppet部署

自动化运维之Puppet

自动部署运维之Puppet

puppet Master的目录结构简介运行顺序