28.4. 使用 systemd RHEL 系统角色部署 systemd 用户单元
您可以为自定义应用程序创建每个用户的单元文件,systemd 从 /home/<username>/.config/systemd/user/ 目录读取这些文件。通过使用 systemd RHEL 系统角色,您可以为单个用户自动部署自定义单元文件。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 您在 playbook 中为 systemd 单元指定的用户已存在。
流程
使用自定义 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对文件名使用
<name>.<unit_type>.j2约定。例如,要创建example.service单元,您必须将文件命名为example.service.j2。将文件与 playbook 放在同一个目录中。创建一个包含以下内容的 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>重要systemdRHEL 系统角色不会创建新用户,如果您在 playbook 中指定了一个不存在的用户,则它会返回一个错误。有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.systemd/README.md文件。验证 playbook 语法:
$ ansible-playbook --syntax-check ~/playbook.yml请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
$ ansible-playbook ~/playbook.yml
验证
验证该服务是否已启用并启动:
# 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 ...