Linux 使用puppet在启动时运行自定义服务
我正在将我们进行linux配置的旧过程迁移到puppet来管理,但我在试图找出如何做到这一点时遇到了问题。我们将一些自定义脚本添加到系统的init.d文件夹中,以管理一些进程,然后这些进程需要在启动时对其执行以下命令:Linux 使用puppet在启动时运行自定义服务,linux,debian,puppet,Linux,Debian,Puppet,我正在将我们进行linux配置的旧过程迁移到puppet来管理,但我在试图找出如何做到这一点时遇到了问题。我们将一些自定义脚本添加到系统的init.d文件夹中,以管理一些进程,然后这些进程需要在启动时对其执行以下命令: update-rc.d $file defaults 因此,我对puppet所做的是将所有这些脚本驻留在一个目录中,然后将它们复制到init.d。然后,我想用前面的命令调用这些文件中的每个文件的“exec”,并使用文件名作为参数。这就是我到目前为止所做的: #copy init
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命令中。看起来我真的很接近,但我就是找不到任何东西来帮助我做我需要做的事情。这是实现这一目标的正确途径吗
谢谢。如果您使用
确保=>'directory'
,您可能无法实现这一点。您需要为每个单独的init脚本声明文件
资源。而且exec不是启用服务的方式。使用服务
资源
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
}
希望这能有所帮助。是的,各方面都有帮助。另外,创建一个已定义的类型来合并
文件
/类型
对。然后,您可以非常简单地枚举您的文件,如my_initscript{['foo',bar',baz']:}
。谢谢大家,这正是我要找的。我不得不考虑用upstart来管理我的脚本,但这对我来说更有效。@Felix:我设置了一个定义的类型来获取不同的文件并启动服务,但我对你所说的迭代有点迷茫。我将其设置为definefoo($file=$title,$source){file{'$file':source=>$source}}}foo{'bar':source=>'baz'}
但是如何使用不同名称/源的列表调用foo?@aykyu如果每个initscript的源代码
不同,那么它应该是一个参数。硬编码,否则。可以同时声明具有相同源的所有文件:foo{['one','two','three']:source=>'baz'}
。如果你在工作中遇到更多困难,请作为新问题提问。