我试图通过我们的 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 agent 无法准确管理服务呢?
请注意,我不是 100% 确定问题出在 ubuntu 18 上。这只是我能想到的唯一重要的变化,显然 Ubuntu 18 中的 systemd 发生了一些变化,尽管我还不太清楚他们到底是什么。我想要的是一种不需要我重写所有服务文件的解决方案,并且有一个可以在仍然运行旧操作系统的服务器以及运行新操作系统的服务器上运行的 puppet 设置。任何人都可以帮助我实现这一目标吗?
如果我遇到了这个问题,我会采取以下步骤:
我会采用 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
如果您希望服务在引导时启动,请运行:
它会将您创建的文件复制
/etc/init.d/influxdb
到您指定的每个运行级别。所以造成这种情况的原因是在太新的操作系统上使用了太旧的 Puppet 版本。Puppet 4.10.12(OP 正在使用)不知道 Ubuntu 18.04 以及它使用 systemd 作为所选初始化系统的事实。那个版本的 Puppet 中的启发式方法基本上知道 systemd 用于 Ubuntu 版本从 15.04 到 17.10(含)。在正式添加对 Ubuntu 18.04 支持的 Puppet 版本 5.3.6 中,该版本被添加到已知使用 systemd 的版本列表中。在 Puppet 的更高版本中,逻辑被翻转为在 Ubuntu 的每个版本上都使用 systemd,除了10.04 到 14.10 版本,这应该会在下一个 Ubuntu 版本出现时让事情变得更容易。