我尝试通过我们的 Puppet-master 设置新服务器。这本应是一件快速的事情,里面的所有东西都运行得相当可靠,在旧服务器上也是如此。
只是新服务器是第一个运行 Ubuntu 18 的服务器,而 puppet 似乎无法启动服务。以下是我在尝试确保服务正在运行时遇到的错误示例:
Error: /Stage[main]/Influxdb/Service[influxdb]/ensure: change from stopped to running failed: Could not find init script for 'influxdb'
在调试输出中我可以看到以下内容:
Executing: '/usr/sbin/service influxdb status'
Service[influxdb](provider=debian): Could not find influxdb in /etc/init.d
Service[influxdb](provider=debian): Could not find influxdb.sh in /etc/init.d
/etc/init.d 中实际上没有与该服务相关的文件,但以前从未需要过。如果我sudo /usr/sbin/service influxdb status
从控制台运行,该命令有效。那么为什么 puppet 代理无法管理该服务呢?
请注意,我不能 100% 确定问题出在 ubuntu 18 上。这只是我能想到的唯一重大变化,而且 Ubuntu 18 中的 systemd 显然也发生了一些变化,尽管我还不太清楚它们到底是什么。我想要的是一个不需要我重写所有服务文件的解决方案,并且有一个可以在仍然运行旧操作系统的服务器以及运行新操作系统的服务器上运行的 puppet 设置。有人能帮我实现这个吗?
答案1
因此,造成这种情况的原因是,在太新的操作系统上使用太旧版本的 Puppet。Puppet 4.10.12(OP 正在使用)不知道 Ubuntu 18.04,也不知道它使用 systemd 作为选定的 init 系统。该版本 Puppet 中的启发式方法基本上知道 systemd 用于 Ubuntu 15.04 到 17.10 版本(含)。在正式添加对 Ubuntu 18.04 支持的 Puppet 版本 5.3.6 中,该版本被添加到已知使用 systemd 的版本列表中。在更高版本的 Puppet 中,逻辑被翻转为 systemd 用于每个版本的 Ubuntu除了版本 10.04 到 14.10,当下一个 Ubuntu 版本发布时,这应该会使事情变得更容易。
答案2
如果我遇到此问题,我会采取以下步骤:
我将采用 influxdb 的 init.sh 脚本(默认情况下可以在您的 influxdb 服务器的路径中找到)
/usr/lib/influxdb/scripts/init.sh
并将其复制到/etc/init.d/influxdb
。使脚本可执行:
chmod u+x /etc/init.d/influxdb
再次运行 Puppet。
如果您找不到该初始化脚本,那么我已将其上传到 pastebin.com,这里是链接(我从运行 1.6.4 版本的服务器上获取它): https://pastebin.com/fkHRGfZH
如果您希望服务在启动时启动,请运行:
update-rc.d influxdb defaults
它会将您创建的文件复制/etc/init.d/influxdb
到您指定的每个运行级别。