ansible 的服务模块如何处理服务名称冲突?

ansible 的服务模块如何处理服务名称冲突?

来自 Ansible 文档:

支持的 init 系统包括 BSD init、OpenRC、SysV、Solaris SMF、systemd、upstart。

Ansible 尝试按照什么顺序运行服务?如果在 /etc/init 中既有服务 X 的 init.d 脚本,又有 upstart 脚本,该怎么办?

答案1

正如ansible.builtin.service 的文档

范围:use

服务模块实际上使用系统特定模块,通常通过自动检测,此设置可以强制使用特定模块。

因此官方的答案是 Ansible 内部决定使用什么。

进一步来说:

通常它使用“ansible_service_mgr”事实的值,当未找到匹配项时,它会返回到旧的“service”模块。

因此,Ansible 通常使用 Ansible 事实“ansible_service_mgr”,该事实告诉它要使用哪个 init 系统。如果失败,则使用“service”模块,该模块具有自己的自动检测逻辑(见下文)。


'ansible_service_mgr' 是在事实/系统/service_mgr.py,通过检查各种系统属性(例如操作系统名称和某些文件的存在)。

至于回退到旧的“服务”模块:查看 ist 代码(Github 上的 modules/service.py),看来ansible分两步进行检测:

  • 检测正在运行的平台和可能的发行版(通过常见/sys_info.py,获取平台子类)
  • 委托给 Service 类的特定平台子类,例如 LinuxService、FreeBsdService 等。

然后,这些特定于平台的子类将尝试检测要使用的初始化系统。例如,LinuxService 将按顺序尝试以下初始化系统:

  • systemd
  • 暴发户
  • OpenRC
  • SysV 初始化

然而,最好不要依赖它,因为它没有官方记录并且可能会发生变化。

相关内容