From 759d83c55fbb049b62ce0d68daacebac253d2598 Mon Sep 17 00:00:00 2001 From: Pig Monkey Date: Tue, 3 Apr 2018 19:12:47 -0700 Subject: [PATCH] run mailsync as a user service When this role was created, Ansible did not support systemd user units, so we setup mailsync as a system service and timer running as the user. The only practical difference in moving to a user service is that the user can control the service without sudo, but we might as well. Existing users should first stop, disable, and remove the old system timer and service: $ sudo systemctl stop mailsync@$USER.timer $ sudo systemctl disable mailsync@$USER.timer $ sudo rm /etc/systemd/system/mailsync@.* If the system timer is present in the trusted unit file, remove it. --- roles/mail/tasks/mailsync.yml | 20 ++++++++++++++------ roles/mail/templates/mailsync.service.j2 | 3 +-- roles/mail/templates/mailsync.timer.j2 | 2 +- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/roles/mail/tasks/mailsync.yml b/roles/mail/tasks/mailsync.yml index 5efe6ca..63f0de9 100644 --- a/roles/mail/tasks/mailsync.yml +++ b/roles/mail/tasks/mailsync.yml @@ -5,14 +5,14 @@ - mailsync - name: Push mailsync service file - template: src=mailsync.service.j2 dest=/etc/systemd/system/mailsync@.service + template: src=mailsync.service.j2 dest=/etc/systemd/user/mailsync.service tags: - mailsync notify: - reload systemd config - name: Push mailsync timer file - template: src=mailsync.timer.j2 dest=/etc/systemd/system/mailsync@.timer + template: src=mailsync.timer.j2 dest=/etc/systemd/user/mailsync.timer tags: - mailsync notify: @@ -20,7 +20,11 @@ - restart mailsync - name: Enable and start mailsync timer - service: name="mailsync@{{ user.name }}.timer" enabled=yes state=started + systemd: name=mailsync.timer user=yes enabled=yes state=started + become: yes + become_user: "{{ user.name }}" + environment: + XDG_RUNTIME_DIR: "/run/user/{{ user.uid }}" when: mail.sync_on == "all" tags: - mailsync @@ -28,13 +32,17 @@ - name: Remove mailsync from trusted unit list lineinfile: dest=/usr/local/etc/trusted_units state=absent - line="mailsync@{{ user.name }}.timer" + line="mailsync.timer,user:{{ user.name }}" when: mail.sync_on == "all" tags: - mailsync - name: Disable mailsync timer - service: name="mailsync@{{ user.name }}.timer" enabled=no + systemd: name=mailsync.timer user=yes enabled=no + become: yes + become_user: "{{ user.name }}" + environment: + XDG_RUNTIME_DIR: "/run/user/{{ user.uid }}" when: mail.sync_on == "trusted" tags: - mailsync @@ -42,7 +50,7 @@ - name: Add mailsync to trusted unit list lineinfile: dest=/usr/local/etc/trusted_units state=present - line="mailsync@{{ user.name }}.timer" + line="mailsync.timer,user:{{ user.name }}" when: mail.sync_on == "trusted" tags: - mailsync diff --git a/roles/mail/templates/mailsync.service.j2 b/roles/mail/templates/mailsync.service.j2 index 13ed6c8..e6337c8 100644 --- a/roles/mail/templates/mailsync.service.j2 +++ b/roles/mail/templates/mailsync.service.j2 @@ -1,11 +1,10 @@ [Unit] -Description=Mailbox synchronization service for user %I +Description=Mailbox synchronization service After=network.target [Service] Type=oneshot ExecStart=/usr/local/bin/mailsync -User=%i StandardOutput=syslog StandardError=syslog Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/{{ user.uid }}/bus diff --git a/roles/mail/templates/mailsync.timer.j2 b/roles/mail/templates/mailsync.timer.j2 index ccf5d60..322a039 100644 --- a/roles/mail/templates/mailsync.timer.j2 +++ b/roles/mail/templates/mailsync.timer.j2 @@ -5,7 +5,7 @@ Description=Mailbox synchronization timer [Timer] OnBootSec={{ mail.sync_boot_delay }} OnUnitActiveSec={{ mail.sync_time }} -Unit=mailsync@%i.service +Unit=mailsync.service [Install] WantedBy=timers.target