我们有RedHat 7.2 Linux操作系统并使用puppet来执行我们的任务。我正在使用puppet来安装一些软件,它运行良好,现在最后一步是创建一个OS级别的服务。在早期版本的RHEL中,我们使用了chkconfig,但它已被systemctl取代。当然,执行此任务的推荐方法是使用服务。由于这是一个自定义软件,我有自己的启动脚本,我通常将其复制到/etc/init.d,运行chkconfig然后启动服务。如何通过Puppet for RedHat 7.2 OS执行这些任务?我只想创建服务(不启动它或任何东西)。这样,当服务器重新启动时,该服务将启动应用程序。
编辑:
@redstonemercury for RHEL 7我认为需要以下内容。但是,当我按照同样的思路思考时,你的建议肯定会有所帮助。
https://serverfault.com/questions/814611/puppet-generated-systemd-unit-files
file { '/lib/systemd/system/myservice.service':
mode => '0644',
owner => 'root',
group => 'root',
content => template('modulename/myservice.systemd.erb'),
}~>
exec { 'myservice-systemd-reload':
command => 'systemctl daemon-reload',
path => [ '/usr/bin', '/bin', '/usr/sbin' ],
refreshonly => true,
}
答案 0 :(得分:2)
在puppet中,使用包资源来安装包(假设它已经在你已经声明的repos中),然后使用文件资源来声明/etc/init.d文件,并放置require => Package[<package_resource_name>]
作为文件声明中的参数,以确保在安装包之后创建自定义文件(因此不会被包的/etc/init.d文件覆盖)。 E.g:
package { 'mypackage':
ensure => present,
}
file { '/etc/init.d/mypackage':
ensure => present,
content => template('mypackage/myinitd'),
require => Package['mypackage'],
}
这是您要使用模板的方法。对于文件,而不是内容使用来源:source => puppet://modules/mypackage/myinitd