如何在Puppet中提供启动服务文件

时间:2018-03-09 16:46:57

标签: puppet

我们有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,
}

1 个答案:

答案 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