28.4. systemd RHEL システムロールを使用した systemd ユーザーユニットのデプロイ
カスタムアプリケーション用としてユーザーごとにユニットファイルを作成でき、systemd はそれらを /home/<username>/.config/systemd/user/ ディレクトリーから読み取ります。systemd RHEL システムロールを使用すると、各ユーザーのカスタムユニットファイルのデプロイを自動化できます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。 - systemd ユニットの Playbook に指定したユーザーが存在する。
手順
カスタム 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 ...