一个木偶新手,我目前正在开发一个部署脚本,在启动时从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议不concat 。 order参数允许您在文件中定位元素。
查看模块的使用自述文件了解更多信息。
如果您安装了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", }