2013-01-30 10 views
5

Mam manifest marionetki, który stwierdza, że ​​usługa "lakier" powinna działać, ale tak nie jest.Pajacyk nie uruchamia usługi (lakier), gdy marionetka stosuje się, jest uruchamiana

Mam inną zdefiniowaną usługę, apache2, która działa dobrze, i zacznij, gdy tylko uruchomię marionetkę.

[email protected]:~$ 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   
[email protected]:~$ 

Zastosuj lalek:

[email protected]:~$ 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 

Ale lakier nie uruchamia się.

Jest to plik manifestu:

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

} 

Dzięki!

Odpowiedz

13

Odpowiadając na moje własne pytanie:

Zgodnie z tym: https://projects.puppetlabs.com/issues/12773 Problem tkwi w skryptach Ubuntu init, lub komenda „usługa” nie powracającego właściwego kodu wyjścia.

Rozwiązaniem jest ustawienie niestandardowej kontroli stanu za pomocą polecenia grep i usługi.

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

Docs powiedzieć, że kukiełka oczekuje initscript serwisu mieć „status” polecenie, które zwraca 0, jeśli usługa jest uruchomiona i niezerowej wartości inaczej. Jest to domyślne zachowanie lalek. Spróbuj zrobić

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

W przypadku, gdy initscript nie daje pożądanych rodzajów zwraca zbiór „hasstatus => false” w bloku dyrektywy usługowej i spróbować.

1

to działa dobrze:

service { $service: 
    ensure  => running, 
    enable  => true, 
    status  => "/usr/sbin/service ${service} status", 
    require => Package["$service"], 
    } 
Powiązane problemy