Ansible中的systemd模块是帮助你轻松管理Linux系统服务的好帮手。有了这个模块,你可以轻松地启动、停止或重启服务,甚至可以设置服务在开机时自动启动,大大简化了系统服务的自动化管理工作。在这篇文章中,我们将详细介绍systemd模块的功能和使用方法,并通过一些实际案例来展示如何高效地管理你的服务。

模块功能概述
systemd 模块主要功能如下:
启动服务停止服务重启服务重新加载服务检查服务状态设置服务开机自启禁用服务开机自启
支持的参数
以下是常用的参数:
参数
描述
name
指定需要管理的服务名称
state
服务的期望状态,可选值:started、stopped、restarted、reloaded
enabled
是否设置服务开机自启,可选值:yes、no
daemon_reload
是否在操作前重新加载systemd守护进程配置
masked
是否屏蔽服务,阻止其启动
scope
指定服务的作用域,通常用于在容器环境中管理服务。
实际案例演示
下面通过几个实际案例,演示如何使用systemd模块管理服务。
1. 启动服务并设置开机自启
场景:确保 nginx 服务已启动,并设置为开机自启。
ad-hoc形式:
复制
ansible webservers -m systemd -a \
"name=nginx state=started enabled=yes"1.2.
playbook形式:
复制
- name:确保nginx服务已启动并开机自启
hosts:webservers
tasks:
-name:启动nginx服务
ansible.builtin.systemd:
name:nginx
state:started
enabled:yes1.2.3.4.5.6.7.8.
state: started 表示服务必须处于运行状态。enabled: yes 表示服务需要开机自启。
执行后,如果目标主机上nginx服务未启动或未设置开机自启,Ansible会进行相应操作。
2. 停止服务并禁用开机自启
场景:停止 apache2 服务,并禁用其开机自启。
ad-hoc形式:
复制
ansible webservers -m systemd -a \
"name=apache2 state=stopped enabled=no"1.2.
playbook形式:
复制
- name:停止apache2服务并禁用开机自启
hosts:webservers
tasks:
-name:停止apache2服务
ansible.builtin.systemd:
name:apache2
state:stopped
enabled:no1.2.3.4.5.6.7.8.
state: stopped 表示服务必须处于停止状态。enabled: no 表示服务不允许开机自启。3. 重启服务并重新加载systemd配置
场景:在更改docker配置后,需要重新加载systemd配置并重启服务。
ad-hoc形式:
复制
ansible docker_hosts -m systemd -a \
"name=docker state=restarted daemon_reload=yes"1.2.
playbook形式:
复制
- name:重启docker服务并重新加载systemd配置
hosts:docker_hosts
tasks:
-name:重新加载systemd守护进程
ansible.builtin.systemd:
daemon_reload:yes
-name:重启docker服务
ansible.builtin.systemd:
name:docker
state:restarted1.2.3.4.5.6.7.8.9.10.11.
daemon_reload: yes 触发重新加载 systemd 守护进程,以应用新的服务配置。
state: restarted 强制重启服务,无论服务是否已运行。
4. 检查服务状态并触发处理
场景:检查 mysql 服务的运行状态,如果未启动,则启动服务。
ad-hoc形式:
复制
ansible database_servers -m systemd -a \
"name=mysql state=started "1.2.
playbook形式:
复制
- name:检查mysql服务状态并启动
hosts:database_servers
tasks:
-name:检查mysql服务状态
ansible.builtin.systemd:
name:mysql
state:started1.2.3.4.5.6.7.
state: started 不仅启动服务,还会检查当前服务状态,如果已经运行,则不重复操作。5. 屏蔽服务
场景:为了防止某些不必要的服务启动,可以屏蔽服务(如 bluetooth)。
ad-hoc形式:
复制
ansible database_servers -m systemd -a \
"name=bluetooth masked=yes "1.2.
playbook形式:
复制
- name:屏蔽bluetooth服务
hosts:all
tasks:
-name:屏蔽服务以防止启动
ansible.builtin.systemd:
name:bluetooth
masked:yes1.2.3.4.5.6.7.
masked: yes 将服务屏蔽,阻止其启动,即使手动尝试启动也会失败。
总结
通过Ansible的 systemd 模块,可以大大简化对系统服务的管理工作。无论是启动、停止、设置开机自启,还是屏蔽服务,该模块都能高效完成。结合实际案例操作,不仅提升了自动化能力,还能减少人为操作失误。