28.4. 使用 systemd RHEL 系统角色部署 systemd 用户单元


您可以为自定义应用程序创建每个用户的单元文件,systemd 从 /home/<username>/.config/systemd/user/ 目录读取这些文件。通过使用 systemd RHEL 系统角色,您可以为单个用户自动部署自定义单元文件。

先决条件

  • 您已准备好控制节点和受管节点
  • 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
  • 您用于连接到受管节点的帐户对它们具有 sudo 权限。
  • 您在 playbook 中为 systemd 单元指定的用户已存在。

流程

  1. 使用自定义 systemd 单元文件内容创建一个 Jinja2 模板。例如,使用服务的内容创建 ~/example.service.j2 文件:

    {{ ansible_managed | comment }}
    [Unit]
    Description=Example systemd service unit file
    
    [Service]
    ExecStart=/bin/true
    RemainAfterExit=yes
    
    [Install]
    WantedBy=multi-user.target
    Copy to Clipboard Toggle word wrap

    对文件名使用 <name>.<unit_type>.j2 约定。例如,要创建 example.service 单元,您必须将文件命名为 example.service.j2。将文件与 playbook 放在同一个目录中。

  2. 创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml

    ---
    - name: Managing systemd services
      hosts: managed-node-01.example.com
      tasks:
        - name: Deploy, enable, and start a custom systemd service for a user
          ansible.builtin.include_role:
            name: rhel-system-roles.systemd
          vars:
            systemd_unit_file_templates:
              - item: example.service.j2
                user: <username>
            systemd_enabled_units:
              - item: example.service
                user: <username>
            systemd_started_units:
              - item: example.service
                user: <username>
    Copy to Clipboard Toggle word wrap
    重要

    systemd RHEL 系统角色不会创建新用户,如果您在 playbook 中指定了一个不存在的用户,则它会返回一个错误。

    有关 playbook 中使用的所有变量的详情,请查看控制节点上的 /usr/share/ansible/roles/rhel-system-roles.systemd/README.md 文件。

  3. 验证 playbook 语法:

    $ ansible-playbook --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    请注意,这个命令只验证语法,不能防止错误的、但有效的配置。

  4. 运行 playbook:

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap

验证

  • 验证该服务是否已启用并启动:

    # ansible managed-node-01.example.com -m command -a 'systemctl --user -M <username>@ status example.service'
    ...
    ● example.service - Example systemd service unit file
         Loaded: loaded (/home/<username>/.config/systemd/user/example.service; enabled; preset: disabled)
         Active: active (exited) since Wed 2025-03-05 13:33:36 CET; 45s ago
    ...
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat