ansible.builtin.service 模块是 Ansible 的内置模块,用于管理远程主机上的服务。它支持多种服务管理系统,包括 BSD、OpenRC、SysV、Solaris SMF、systemd 和 upstart。对于 Windows 系统,需要使用 ansible.windows.win_service 模块。

主要参数

  • name:字符串,指定服务的名称(必需参数)。
  • state:字符串,指定服务的状态,可选值为 started、stopped、restarted 和 reloaded。
    • started 和 stopped:分别用于启动和停止服务。
    • restarted:重启服务,可以通过 sleep 参数指定停止和启动之间的延迟时间。
    • reloaded:重新加载服务的配置文件。
  • enabled:布尔值,指定服务是否在启动时自动运行。默认为 false。
  • sleep:整数,指定重启服务后等待的秒数。
  • arguments/args:字符串,指定传递给服务的额外参数。

示例:在远程主机上重启服务

以下是一个示例 Playbook,展示如何使用 service 模块在远程主机上重启服务。

Playbook 文件:service.yml

---
- name: service module demo
  hosts: all
  become: true
  tasks:
    - name: sshd restart
      ansible.builtin.service:
        name: sshd
        state: restarted
        enabled: true

执行步骤

  1. 准备主机清单文件 确保你的 inventory 文件中包含了目标主机的列表。例如:

    ini [targets] demo.example.com

  2. 运行 Playbook 使用以下命令运行 Playbook:

    bash ansible-playbook -i inventory service.yml

执行结果

如果任务成功执行,输出将类似于以下内容:

PLAY [service module demo] *******************************************************

TASK [Gathering Facts] ******************************************************
ok: [demo.example.com]

TASK [sshd restart] **********************************************************
changed: [demo.example.com]

PLAY RECAP *******************************************************************
demo.example.com           : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

注意事项

  1. 权限问题:管理服务通常需要管理员权限,因此需要使用 become: true。
  2. 服务存在性:在重启服务之前,确保服务已安装并存在。可以使用 service_facts 模块检查服务是否存在。
  3. 幂等性:如果服务已经处于所需状态,则不会重复执行操作,确保任务的幂等性。
  4. Windows 系统:对于 Windows 系统,需要使用 ansible.windows.win_service 模块。
  5. 延迟时间:如果需要在重启服务后等待一段时间,可以使用 sleep 参数指定延迟秒数。

总结

通过 service 模块,你可以轻松地管理远程主机上的服务,包括启动、停止、重启和重新加载配置文件。通过灵活使用这些参数,你可以确保服务在启动时自动运行,并满足你的自动化需求。