答案1
您可以使用PuppetLabs Concat 模块动态地将部分内容插入到rc.local
文件中,如下所示:
将文件定义为一个连接文件,并添加一个标题(hash-bang、“由 Puppet 管理”注释等) - 注意下面的内容可能不起作用,我不确定 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'
}
完了!
您可以concat::fragment
在多个子类(以及多个模块)中使用,尽管这真的不推荐!)只要您设置正确的target
值并将该文件声明为concat
资源即可。该order
参数允许您在文件中定位元素。
检查模块的使用自述文件了解更多信息。
答案2
如果您安装了 cron 服务,则可以使用 @reboot 时间规范将其用于此目的。使用 puppet 管理此操作更容易,因为您只需在 /etc/cron.d 中创建一个单独的文件,而不必尝试编辑单个整体文件。
经测试,以下方法有效:
file { "/etc/cron.d/at_startup_myscript":
content => "@reboot root /usr/local/bin/myscript.sh \n",
}