使用puppet在启动时运行自定义服务

时间:2014-09-12 00:48:00

标签: linux debian puppet

我正在迁移我们的旧程序,我们的linux配置由puppet管理,但我在尝试弄清楚如何执行此操作时遇到问题。我们在系统的init.d文件夹中添加了一些自定义脚本来管理某些进程,然后这些脚本需要执行这些命令才能在启动时启动:

update-rc.d $file defaults

所以我对puppet的做法是,我将所有这些脚本都驻留在一个目录中,然后将它们复制到init.d.然后我想打电话给'exec'使用前一个命令在每个文件上,并使用文件名作为参数。这就是我到目前为止所做的:

#copy init files    
file { '/etc/init.d/':
      ensure => 'directory',
      recurse => 'remote',
      source => ["puppet:///files/init_files/"],
      mode => 755,
      notify => Exec[echo],
    }

exec { "echo":
  command => "update-rc.d $file defaults",
  cwd => "/tmp", #directory to execute from
  path => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:",
  refreshonly => true
}

这将复制所有文件,并在添加/更新内容时调用exec,但我无法弄清楚如何将文件名作为参数传递给exec命令。我似乎真的很接近,但我无法找到任何可以帮助我需要做的事情。这是尝试实现这一目标的正确方法吗?

感谢。

1 个答案:

答案 0 :(得分:4)

如果您使用ensure => 'directory',可能无法实现这一目标。您需要为每个单独的init脚本声明file资源。并且exec不是启用服务的方法。使用service资源。

 file { '/etc/init.d':
   ensure => 'directory',
   mode   => '0755'
 }

 file { '/etc/init.d/init_script_1':
   ensure => 'present',
   owner  => 'root',
   group  => 'root',
   mode   => '0755',
   notify => Service['init_script_1']
 }

 file { '/etc/init.d/init_script_2':
   ensure => 'present',
   owner  => 'root',
   group  => 'root',
   mode   => '0755',
   notify => Service['init_script_2']
 }

 service { 'init_script_1':
   ensure => running,
   enable => true
 }

 service { 'init_script_2':
   ensure => running,
   enable => true
 }

希望这有帮助。