我正在迁移我们的旧程序,我们的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命令。我似乎真的很接近,但我无法找到任何可以帮助我需要做的事情。这是尝试实现这一目标的正确方法吗?
感谢。
答案 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
}
希望这有帮助。