con rối: buộc khởi động lại dịch vụ sau khi tập tin cấu hình được sửa đổi


21

Làm thế nào tôi có thể đảm bảo rằng nếu phiên bản mới của tệp cấu hình được tải xuống thông qua con rối từ kho lưu trữ chính đến một trong các máy chủ được quản lý dịch vụ có liên quan được khởi động lại.

kịch bản điển hình - giả sử có cấu hình munin hoặc apache mới. rối khách hàng phát hiện ra nó, ghi đè lên các tệp cục bộ ... và ... - làm thế nào để đảm bảo dịch vụ được khởi động lại / tải lại?

cảm ơn rất nhiều!

Câu trả lời:


23

Một thay thế để thông báo là đăng ký:

file { "/etc/sshd_config":
    source => "....",
}

service { sshd:
    ensure => running,
    subscribe => File["/etc/sshd_config"],
}

Sự khác biệt là mối quan hệ được mô tả từ đầu kia. Ví dụ: bạn có thể làm cho apache đăng ký vào /etc/apache/httpd.conf, nhưng bạn sẽ tạo một tệp vhost thông báo cho apache, vì lớp apache của bạn sẽ không biết về mọi vhost mà bạn có.

Một tình huống kết thúc kép tương tự áp dụng cho yêu cầu và trước đó. Đó chỉ là một vấn đề có ý nghĩa hơn trong tình huống cụ thể.

Như Chad đã đề cập, nếu bạn thấy con rối liên tục cố gắng bắt đầu dịch vụ của mình, thì bạn cần thêm một tham số mẫu, đó là một biểu thức chính quy để áp dụng vào danh sách các quy trình. Theo mặc định, con rối sẽ dừng lại và bắt đầu khởi động lại một dịch vụ. Nếu bạn thêm "hasrestart => true", thì nó sẽ sử dụng lệnh được chỉ định trong tham số "restart" để khởi động lại dịch vụ.


22

có vẻ như tôi đã tìm thấy thứ gì đó:

file { "/etc/sshd_config":
    source => "....",
    notify => Service[sshd]
}

service { sshd:
    ensure => running
}

chúng ta sẽ thấy nó sẽ hoạt động như thế nào dù sao suy nghĩ của bạn về chủ đề này đều được chào đón.


1
Vâng. Bạn có thể tìm thấy các chi tiết trong Múa rối Loại tham chiếu dưới "Metaparameters" ( reductivelabs.com/trac/puppet/wiki/TypeReference#metaparameters )
Chad Huneycutt

1
Ồ, và tùy thuộc vào hệ điều hành của bạn, bạn có thể phải chơi với các tham số hasstatus, hasrestart và / hoặc mẫu của loại dịch vụ.
Chad Huneycutt

2

(Tôi biết đây là một câu hỏi siêu cũ, nhưng chỉ nghĩ rằng tôi đã đặt hai xu của mình với một cách (theo ý kiến ​​của tôi) dễ dàng hơn nhiều để làm điều đó)

Hãy sử dụng ký hiệu mũi tên là tốt:

file { "/etc/sshd_config":
  source => "....",
} ~>
service { sshd:
  ensure => running
}

hoặc là

File['/etc/sshd_config'] ~> Service['sshd']

trong ví dụ đầu tiên của bạn, bạn không cần tùy chọn thông báo nếu bạn sử dụng mũi tên
c4f4t0r

Rất tiếc. Tôi chỉ sao chép và quên lấy nó ra.
Ethan Brouwer

1

Điều này hoạt động cho Solaris 10 :)

class sun_cron_root {
    file { "/var/spool/cron/crontabs/root" :
            source => "puppet:///files/cron/sun/sun_cron_root"
            }

    service {
            "cron":
            provider => "smf",
            ensure => running,
            enable => true,
            hasrestart => true,
            subscribe => File["/var/spool/cron/crontabs/root"]
            }

}

0

Có nhiều ký hiệu tương đương:

Thông báo :

file { '/etc/sshd_config':
    notify => Service[sshd],
}

service { sshd:
    ensure => running
}

Theo dõi :

file { '/etc/sshd_config':
   ...
}

service { sshd:
    ensure => running,
    subscribe => File['/etc/sshd_config'],
}

Ký hiệu mũi tên :

File['/etc/sshd_config'] ~> Service['sshd']

Khai báo chuỗi

file { '/etc/sshd_config':
   ...
}
~> service { sshd:
    ensure => running,
}

Nếu bạn muốn kích hoạt reloadthay vì restart, hãy điều chỉnh khai báo dịch vụ:

service { sshd:
    ensure => running,
    restart => 'pkill -HUP sshd', # if service support such reload
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.