0x0i.systemd

ansible logo

redhat logo

Ansible 角色 :vertical_traffic_light: Systemd

Galaxy 角色 GitHub 最新版本 许可证: MIT

目录

这个 Ansible 角色用于安装和配置 Systemd 单元:由 Linux systemd 系统/服务管理器管理的系统组件和服务。

支持的平台:
* Debian
* Redhat(CentOS/Fedora)
* Ubuntu

要求

systemd 通常被视为 Linux 发行版的事实上的服务管理工具,应该包含在大多数操作系统安装中。虽然通常不是问题,但值得注意的是,systemd 需要 Linux 内核 >= 3.13Linux 内核 >= 4.2 需要支持统一 cgroup 层次结构。

请参考 systemd 的 README 获取更多详细信息。

角色变量

变量可用,并根据以下软件和机器配置阶段进行组织:

  • 安装
  • 配置
  • 启动

安装

[unit_config: <config-list-entry>:] path: (默认: /etc/systemd/system)

  • 加载 systemd 单元配置的路径。

    除了 /etc/systemd/system(默认),单元配置和相关的 ".d" 目录覆盖可以放在 /usr/lib/systemd/system/run/systemd/system 目录中。

    /etc 中的文件具有优先权,其次是 /run,最后是 /usr/lib。在任何这些目录下的覆盖文件优先于位于任何地方的单元文件。不同名称的多个覆盖文件会按字母顺序应用,不论它们位于哪个目录。请参阅下表,并查阅 systemd(1) 以获取关于路径加载优先级的更多详细信息。

system 模式 (--system)下加载路径

单元加载文件路径 描述
/etc/systemd/system 本地配置
/run/systemd/system 运行时单元
/usr/local/lib/systemd/system 为本地系统管理安装的单元
/usr/lib/systemd/system 安装包的单元

用户模式 (--user)下加载路径

单元加载文件路径 描述
$XDG_CONFIG_HOME/systemd/user 或 $HOME/.config/systemd/user 用户配置 ($XDG_CONFIG_HOME 如果设置则使用,否则使用 ~/.config)
/etc/systemd/user 管理员创建的用户单元
$XDG_RUNTIME_DIR/systemd/user 运行时单元(仅在 $XDG_RUNTIME_DIR 设置时使用)
/run/systemd/user 运行时单元
$dir/systemd/user 对于 $XDG_DATA_DIRS 中的每个 $dir 为安装的用户单元提供的附加位置,针对 $XDG_DATA_DIRS 中的每个条目
/usr/local/lib/systemd/user 为本地系统管理安装的用户单元
/usr/lib/systemd/user 由发行版包管理器安装的用户单元

示例

 unit_config:
   - name: apache
     path: /run/systemd/system
     Service:
       ExecStart: /usr/sbin/httpd
       ExecReload: /usr/sbin/httpd $OPTIONS -k graceful
     Install:
       WantedBy: multi-user.target

[unit_config: <config-list-entry>:] type: <string> (默认: service)

  • 要配置的 systemd 单元的类型。目前有 11 种不同的单元类型,从守护进程及其组成的进程到路径修改触发器。请参阅 systemd(1) 以获取可用单元的完整列表。

示例

 unit_config:
   - name: apache
     type: socket
     Socket:
       ListenStream: 0.0.0.0:8080
       Accept: yes
     Install:
       WantedBy: sockets.target

配置

systemd 单元的配置在 ini 风格 的配置文件中声明。systemd 单元 INI 配置由部分组成:所有单元类型共有的 2 个部分(UnitInstall)以及每个单元类型特有的 1 个部分。这些单元配置可以在角色的 unit_config 哈希变量中以字典列表的形式表达,包含代表单元名称、类型、加载路径和前面提到的部分定义的键值对。

每个配置部分定义提供一个字典,其中包含对应部分选项的一组键值对(例如,系统或 Web 服务的 [Service] 部分的 ExecStart 规范或 Web [Socket] 部分的 ListenStream 选项)。

[unit_config: <list-entry>:] Unit | <unit-type 例如 Service, Socket, Device 或 Mount> | Install: <dict> (默认: {})

  • 单元配置的部分定义

任何由相应的 Systemd 单元类型规范支持的配置设置/值键对,都应能够在每个 unit_config 集合中表达,且在相关的 INI 配置中正确呈现。

_以下提供了每种单元类型的概述和示例配置以供参考_。

[Service]

管理守护进程及其组成的进程。

示例

 unit_config:
   # path: /etc/systemd/system/example-service.service
   - name: example-service
     Unit:
       Description: Sleepy service
     Service:
       ExecStart: /usr/bin/sleep infinity
     Install:
       WantedBy: multi-user.target

[Socket]

封装系统内的本地 IPC 或网络套接字。

示例

 unit_config:
   - name: docker
     type: socket
     Unit:
       Description: Listens/accepts connection requests at /var/run/docker/sock (implicitly *Requires=* associated docker.service)
     Socket:
       ListenStream: /var/run/docker.sock
       SocketMode: 0660
       SockerUser: root
       SocketGroup: docker
     Install:
       WantedBy: sockets.target

[Mount]

控制系统中的挂载点。

示例

 unit_config:
   - name: tmp_new
     type: mount
     Unit:
       Description: New Temporary Directory (/tmp_new)
       Conflicts: umount.target
       Before: local-fs.target umount.target
       After: swap.target
     Mount:
       What: tmpfs
       Where: /tmp_new
       Type: tmpfs
       Options: mode=1777,strictatime,nosuid,nodev

[Automount]

提供按需挂载文件系统的自动挂载功能,以及并行启动。

示例

 unit_config:
   - name: proc-sys-fs-binfmt_misc
     type: automount
     Unit:
       Description: Arbitrary Executable File Formats File System Automount Point
       Documentation: https://www.kernel.org/doc/html/latest/admin-guide/binfmt-misc.html
       ConditionPathExists: /proc/sys/fs/binfmt_misc/
       ConditionPathIsReadWrite: /proc/sys/
     Automount:
       Where: /proc/sys/fs/binfmt_misc

[Device]

暴露内核设备并实现基于设备的激活。

这种单元类型没有特定选项,因此没有单独的 [Device] 部分。通用配置项在通用的 [Unit][Install] 部分中配置。systemd 会为所有标记为 "systemd" udev 标签的内核设备动态创建设备单元(默认情况下是所有块设备和网络设备,以及其他一些设备)。要标记一个 udev 设备,请在 udev 规则文件中使用 TAG+="systemd。还要注意,设备单元的命名与它们控制的 /sys/dev 路径相对应。

示例

# /usr/lib/udev/rules.d/10-nvidia.rules

SUBSYSTEM=="pci", ATTRS{vendor}=="0x12d2", ATTRS{class}=="0x030000", TAG+="systemd", ENV{SYSTEMD_WANTS}="nvidia-fallback.service"

# 这将导致自动生成一个 nvidia-fallback.device 文件,并设置适当的 [Unit] 和 [Install] 部分

[Target]

提供单元组织能力,并在启动期间设置众所周知的同步点。

这种单元类型没有特定选项,因此没有单独的 [Target] 部分。通用配置项在通用的 [Unit][Install] 部分中配置。

示例

 unit_config:
   - name: graphical
     path: /usr/lib/systemd/system/graphical.target
     type: target
     Unit:
       Description: Graphical Interface
       Documentation: man:systemd.special(7)
       Requires: multi-user.target
       Wants: display-manager.service
       Conflicts: rescue.service rescue.target
       After: multi-user.target rescue.service rescue.target display-manager.service
       AllowIsolate: yes

[Timer]

根据定时器触发其他单元的激活。

示例

 unit_config:
   - name: dnf-makecache
     type: timer
     Timer:
       OnBootSec: 10min
       OnUnitInactiveSec: 1h
       Unit: dnf-makecache.service
     Install:
       WantedBy: multi-user.target

[Swap]

封装操作系统的内存交换分区或文件。

示例

 # 确保交换文件存在
 mkdir -p /var/vm
 fallocate -l 1024m /var/vm/swapfile
 chmod 600 /var/vm/swapfile
 mkswap /var/vm/swapfile

------------------------------------

 unit_config:
   - name: var-vm-swap
     type: swap
     Unit:
       Description=Turn on swap for /var/vm/swapfile
     Swap:
       What: /var/vm/swapfile
     Install:
       WantedBy: multi-user.target

[Path]

在文件系统对象发生变化或被修改时激活其他服务。

示例

 unit_config:
   - name: Repository Code Coverage Analysis trigger
     type: path
     Unit:
       Description: Activate code coverage analysis on modified git repositories
     Path:
       PathChanged: /path/to/git/repo
       Unit: code-coverage-analysis

[Scope]

管理一组系统或远程进程。

Scope 单元不是通过单元配置文件配置的,而是仅通过 systemd 的总线接口以编程方式创建。 与服务单元不同,Scope 单元管理外部创建的进程,不会自己启动进程。Scope 单元的主要目的是将系统服务的工作进程进行分组,以便组织和管理资源。

示例

# *此配置是为一个瞬态单元文件,使用 systemd API 编程创建。请勿复制或编辑。*
 unit_config:
   - name: user-session
     type: scope

     Unit:
       Description: Session of user
       Wants: [email protected]
       Wants: [email protected]
       After: systemd-logind.service systemd-user-sessions.service [email protected] [email protected]
       RequiresMountsFor: /home/user
       Scope:
         Slice: user-1000.slice
      Scope:
         SendSIGHUP=yes
         TasksMax=infinity

[Slice]

在层次树中分组和管理系统进程,以便进行资源管理。

切片的名称编码了在树中的位置。名称由用短划线分隔的一系列名称组成,描述切片从根切片开始的路径。默认情况下,服务和范围单元被放置在 system.slice 中,与 systemd-machined(1) 注册的虚拟机和容器被放置在 machine.slice 中,用户会话由 systemd-logind(1) 处理则在 user.slice 中。

有关更多详细信息,请参阅 systemd.slice(5)

[Drop-in]

提供单元的覆盖功能。

示例

 unit_config:
   - name: override.conf
     type: conf
     path: "/lib/systemd/system/[email protected]"
     Service:
       ExecStart:
         - ""
         - "-/sbin/agetty -a muru --noclear %I $TERM"
       EnvironmentFile=/path/to/some/file

启动

[unit_config: <config-list-entry>:] enabled: (默认: no)

  • 服务是否应该在启动时启动

[unit_config: <config-list-entry>:] state: (默认: stopped)

  • 单元激活状态

依赖关系

示例剧本

默认示例(未指定自定义单元配置):

- hosts: all
  roles:
  - role: 0x0I.systemd

服务/套接字/挂载对:

- hosts: webservers
  roles:
  - role: 0x0i.systemd
    vars:
      unit_config:
      - name: "my-service"
        Unit:
          After: network-online.target
          Wants: network-online.target
          Requires: my-service.socket
        Service:
          User: 'web'
          Group: 'web'
          ExecStart: '/usr/local/bin/my_service $ARGS'
          ExecReload: '/bin/kill -s HUP $MAINPID'
        Install:
          WantedBy: 'multi-user.target'
      - name: "my-service"
        type: "socket"
        Socket:
          ListenStream: '0.0.0.0:4321'
          Accept: 'true'
        Install:
          WantedBy: 'sockets.target'
      - name: "var-data-my_service"
        type: "mount"
        path: "/run/systemd/system"
        Mount:
          What: '/dev/nvme0'
          Where: '/var/data/my_service'
        Install:
          WantedBy: 'multi-user.target'

许可证

MIT

作者信息

此角色由 O1.IO 于 2019 年创建。

关于项目

Systemd, a system and service manager for Linux operating systems

安装
ansible-galaxy install 0x0i.systemd
许可证
Unknown
下载
8.3M
拥有者