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
执行步骤
-
准备主机清单文件 确保你的
inventory文件中包含了目标主机的列表。例如:ini [targets] demo.example.com -
运行 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
注意事项
- 权限问题:管理服务通常需要管理员权限,因此需要使用
become: true。 - 服务存在性:在重启服务之前,确保服务已安装并存在。可以使用
service_facts模块检查服务是否存在。 - 幂等性:如果服务已经处于所需状态,则不会重复执行操作,确保任务的幂等性。
- Windows 系统:对于 Windows 系统,需要使用
ansible.windows.win_service模块。 - 延迟时间:如果需要在重启服务后等待一段时间,可以使用
sleep参数指定延迟秒数。
总结
通过 service 模块,你可以轻松地管理远程主机上的服务,包括启动、停止、重启和重新加载配置文件。通过灵活使用这些参数,你可以确保服务在启动时自动运行,并满足你的自动化需求。