Ansible systemd
模块
一、简介
- 功能:
systemd
模块用于管理和控制基于 systemd 的 Linux 系统服务。它提供了启动、停止、重启服务,以及管理服务的启动行为(如开机自动启动)的功能。 - 使用场景:常用于现代 Linux 发行版(如 RHEL、CentOS、Rocky Linux、Ubuntu 等)上管理系统服务,确保服务按照预期运行并在系统重启后保持一致状态。
二、基本用法
2.1 语法
ansible <pattern> -m systemd -a "name=<service_name> state=<state> [enabled=<yes/no>] [other options]"
<pattern>
:指定要操作的主机或主机组,例如all
、webservers
。-m systemd
:指定使用systemd
模块。name=<service_name>
:指定要管理的 systemd 服务名称。state=<state>
:指定服务的目标状态,如started
、stopped
、restarted
、reloaded
等。enabled=<yes/no>
:指定服务是否应在系统启动时自动启动。
2.2 常见 state
参数
started
:启动服务。如果服务已经在运行,则不执行任何操作。stopped
:停止服务。如果服务已经停止,则不执行任何操作。restarted
:重启服务,无论服务是否在运行,都会停止并重新启动服务。reloaded
:重新加载服务配置,而不中断服务运行。仅对支持此操作的服务有效。
三、使用示例
3.1 启动服务
ansible all -m systemd -a "name=httpd state=started"
- 解释:在所有主机上启动
httpd
服务(Apache Web 服务器)。如果服务已经运行,则不做任何操作。
3.2 停止服务
ansible all -m systemd -a "name=httpd state=stopped"
- 解释:在所有主机上停止
httpd
服务。如果服务已经停止,则不做任何操作。
3.3 重启服务
ansible all -m systemd -a "name=httpd state=restarted"
- 解释:在所有主机上重启
httpd
服务。无论服务是否在运行,都会停止并重新启动它。
3.4 重新加载服务配置
ansible all -m systemd -a "name=httpd state=reloaded"
- 解释:在所有主机上重新加载
httpd
服务的配置文件,而不中断服务运行。
3.5 启动服务并设置为开机自动启动
ansible all -m systemd -a "name=httpd state=started enabled=yes"
- 解释:在所有主机上启动
httpd
服务,并确保它在系统启动时自动启动。
3.6 停止服务并禁用开机自动启动
ansible all -m systemd -a "name=httpd state=stopped enabled=no"
- 解释:在所有主机上停止
httpd
服务,并确保它在系统启动时不会自动启动。
四、其他常用选项
4.1 enabled
-
功能:控制服务是否在系统启动时自动启动。设置为
yes
表示启用自动启动,no
表示禁用。 -
用法:
ansible all -m systemd -a "name=httpd enabled=yes"
- 解释:确保
httpd
服务在系统启动时自动启动。
- 解释:确保
4.2 daemon_reload
-
功能:在对 systemd 单元文件进行更改后,强制重新加载 systemd 管理器配置。通常在修改了服务的 unit 文件或创建新服务时使用。
-
用法:
ansible all -m systemd -a "name=httpd state=restarted daemon_reload=yes"
- 解释:重启
httpd
服务,并重新加载 systemd 配置,以应用新的 unit 文件更改。
- 解释:重启
4.3 masked
-
功能:将服务设置为 masked 状态,防止服务被启动。设置为
yes
表示掩蔽(mask)服务,no
表示取消掩蔽(unmask)服务。 -
用法:
ansible all -m systemd -a "name=httpd masked=yes"
- 解释:在所有主机上掩蔽
httpd
服务,防止其被启动。
- 解释:在所有主机上掩蔽
4.4 scope
-
功能:指定服务的作用域,通常用于在容器环境中管理服务。
-
用法:
ansible all -m systemd -a "name=httpd state=started scope=system"
- 解释:在所有主机上启动
httpd
服务,并指定其作用域为system
。
- 解释:在所有主机上启动
五、注意事项
- 服务名称:确保服务名称与系统上实际使用的服务名称一致,不同的发行版可能使用不同的服务名称(例如
httpd
vsapache2
)。 - 系统兼容性:
systemd
模块适用于使用 systemd 作为初始化系统的 Linux 发行版。在非 systemd 系统(如旧版本的 Debian 或 CentOS)上,可能需要使用service
模块。 daemon_reload
的使用:在对 service unit 文件进行修改后,使用daemon_reload=yes
选项来确保 systemd 重新加载配置,并应用更改。