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

⚓模块功能概述

systemd 模块主要功能如下:

  • 启动服务
  • 停止服务
  • 重启服务
  • 重新加载服务
  • 检查服务状态
  • 设置服务开机自启
  • 禁用服务开机自启

⚓支持的参数

以下是常用的参数:

参数描述
name指定需要管理的服务名称
state服务的期望状态,可选值:startedstoppedrestartedreloaded
enabled是否设置服务开机自启,可选值:yesno
daemon_reload是否在操作前重新加载systemd守护进程配置
masked是否屏蔽服务,阻止其启动
scope指定服务的作用域,通常用于在容器环境中管理服务。

⚓实际案例演示

下面通过几个实际案例,演示如何使用systemd模块管理服务。

🍀启动服务并设置开机自启

场景:确保 nginx 服务已启动,并设置为开机自启。

  • ad-hoc形式:
ansible webservers -m systemd -a \
"name='nginx' state='started' enabled='yes'"
  • playbook形式:
- name: 确保nginx服务已启动并开机自启
  hosts: webservers
  tasks:
    - name: 启动nginx服务
      ansible.builtin.systemd:
        name: nginx
        state: started
        enabled: yes
  • state: started 表示服务必须处于运行状态。

  • enabled: yes 表示服务需要开机自启。

执行后,如果目标主机上nginx服务未启动或未设置开机自启,Ansible会进行相应操作。

🍀停止服务并禁用开机自启

场景:停止 apache2 服务,并禁用其开机自启。

  • ad-hoc形式:
ansible webservers -m systemd -a \
"name='apache2' state='stopped' enabled='no'"
  • playbook形式:
- name: 停止 apache2 服务并禁用开机自启
  hosts: webservers
  tasks:
    - name: 停止 apache2 服务
      ansible.builtin.systemd:
        name: apache2
        state: stopped
        enabled: no
  • state: stopped 表示服务必须处于停止状态。

  • enabled: no 表示服务不允许开机自启。

🍀重启服务并重新加载systemd配置

场景:在更改docker配置后,需要重新加载systemd配置并重启服务。

  • ad-hoc形式:
ansible docker_hosts -m systemd -a \
"name='docker' state='restarted' daemon_reload='yes'"
  • playbook形式:
- name: 重启 docker 服务并重新加载 systemd 配置
  hosts: docker_hosts
  tasks:
    - name: 重新加载 systemd 守护进程
      ansible.builtin.systemd:
        daemon_reload: yes

    - name: 重启 docker 服务
      ansible.builtin.systemd:
        name: docker
        state: restarted
  • daemon_reload: yes 触发重新加载 systemd 守护进程,以应用新的服务配置。

  • state: restarted 强制重启服务,无论服务是否已运行。

🍀检查服务状态并触发处理

场景:检查 mysql 服务的运行状态,如果未启动,则启动服务。

  • ad-hoc形式:
ansible database_servers -m systemd -a \
"name='mysql' state='started' "
  • playbook形式:
- name: 检查 mysql 服务状态并启动
  hosts: database_servers
  tasks:
    - name: 检查 mysql 服务状态
      ansible.builtin.systemd:
        name: mysql
        state: started
  • state: started 不仅启动服务,还会检查当前服务状态,如果已经运行,则不重复操作。

🍀屏蔽服务

场景:为了防止某些不必要的服务启动,可以屏蔽服务(如 bluetooth)。

  • ad-hoc形式:
ansible database_servers -m systemd -a \
"name='bluetooth'  masked=yes "
  • playbook形式:
- name: 屏蔽 bluetooth 服务
  hosts: all
  tasks:
    - name: 屏蔽服务以防止启动
      ansible.builtin.systemd:
        name: bluetooth
        masked: yes
  • masked: yes 将服务屏蔽,阻止其启动,即使手动尝试启动也会失败。

⚓总结

通过Ansiblesystemd 模块,可以大大简化对系统服务的管理工作。无论是启动、停止、设置开机自启,还是屏蔽服务,该模块都能高效完成。结合实际案例操作,不仅提升了自动化能力,还能减少人为操作失误。

推荐阅读