我正在使用 puppet(理论上)让 npcd 在安装时启动,但是在 Ubuntu 上,该服务在 /etc/default/npcd 中安装时默认设置为 RUN="no":
$ cat /etc/default/npcd
# Default settings for the NPCD init script.
# Should NPCD be started? ("yes" to enable)
RUN="no"
# Additional options that are passed to the daemon.
DAEMON_OPTS="-d -f /etc/pnp4nagios/npcd.cfg"
我认为这块傀儡配置可以处理以下事情:
service { "npcd":
enable => true,
ensure => "running",
require => Package["pnp4nagios"],
}
但遗憾的是,它没有,除了实际重写 /etc/default 中的文件外,我不知道该怎么做。有没有一种直接的方法来启用我没有看到的服务?
为了记录,我正在使用 Ubuntu 12.04.2 和 puppet 版本 3.1.0。
答案1
更新该文件然后重新启动服务是唯一的方法。您可以推送一个新文件,然后让服务要求该文件;这样,当内容更新时,服务将正常启动。
如果您不想完全替换文件,您可以使用 Puppet augeas 工具仅修改默认文件中的单行。
Debian 及其衍生产品中的一些服务在软件包安装后不会自动启动,除非在 /etc/default 中启用它们。有点烦人。
编辑:仅供参考,初始化脚本实际上正在从该文件中读取值(通常只是从中获取值)。
答案2
为了好玩,我检查了我的 12.04 机器上的几个标准守护进程。你必须管理这个文件,目前没有办法绕过它。
snmpd
# snmpd control (yes means start daemon).
SNMPDRUN=yes
收集
# 0: start collectd on boot, 1: do not start collectd on boot
# default: 0
DISABLE=0
木偶
# Start puppet on boot?
START=yes
管理
# START_DAEMON:
# should mdadm start the MD monitoring daemon during boot?
START_DAEMON=true
哈普罗西
# Set ENABLED to 1 if you want the init script to start haproxy.
ENABLED=1
答案3
我认为可行的方法之一是使用 augeas 工具和 puppet,例如
augeas { "npcd_default":
changes => [
"set /files/etc/default/npcd/Run yes",
],
}
请参阅手动的了解详情
答案4
使用augeas
Puppet 中的类型执行此操作是一种方法(如@DukeLion 所建议的)。
另一种方法是使用augeasproviders
模块,与shellvar
提供商:
shellvar { 'npcd_default':
ensure => present,
target => '/etc/default/npcd',
variable => 'RUN',
value => 'yes',
comment => 'We want npcd to run',
}
这样更好,因为 Ruby 提供程序会干净利落地使用 Augeas。它还将自动管理引用和注释。