用puppet把命令添加到rc.local上面“exit 0”的正确方法是什么?

一个木偶新手,我目前正在开发一个部署脚本,在启动时从rc.local启动几个foreverjs服务。

我担心的是,在Ubuntu中, rc.local在文件底部出现一个exit 0

我没有看到使用stdlib的file_line指令的方法 ,以确保我的线出现在退出命令(或其他地方,特别是如果需要的话) 之上

我可以用一个exec块和一些丑陋的sed来实现,但是在傀儡中必须有一个更加标准和优雅的方式吗?

您可以使用PuppetLabs Concat模块将部件dynamic插入到rc.local文件中,如下所示:

将文件定义为一个concat文件,然后添加一个头文件(hash-bang,“由Puppetpipe理”的注释等) – 注意下面的代码可能不起作用,我不确定Puppet的换行符处理我的头顶!

 concat { '/etc/rc.local': ensure => present, } concat::fragment { '00_rc.local_header': target => '/etc/rc.local' content => '#!/bin/bash\n# This file is manageed by Puppet, do not modify!', order => '01' } 

添加您的自定义零件,确保指定正确的target和高于您的标题的order值:

 concat::fragment { '05_rc.local_custom': target => '/etc/rc.local', content => template('path/to/template.erb'), order => '05' } concat::fragment { '15_rc.local_custom_2': target => '/etc/rc.local', source => 'puppet:///modules/mymodule/myfile.txt', order => '06' } 

添加exit 0页脚:

 concat::fragment { '99_rc.local_footer': target => '/etc/rc.local', content => 'exit 0\n', order => '99' } 

鳍!

只要设置了正确的target并且将该文件声明为concat资源,就可以在多个子类之间使用concat::fragment (也可以使用多个模块,不过build议不concatorder参数允许您在文件中定位元素。

查看模块的使用自述文件了解更多信息。

如果您安装了cron服务,则可以使用@reboot时间规范来实现此目的。 使用puppet更容易pipe理的是,您可以在/etc/cron.d中创build一个单独的文件,而不是尝试编辑单个单一文件。

我testing了以下工作:

 file { "/etc/cron.d/at_startup_myscript": content => "@reboot root /usr/local/bin/myscript.sh \n", }