On Thu, Mar 9, 2017 at 4:53 PM, Jonathan Dowland <jon+systemd-de...@alcopop.org> wrote: > Hey, > > I have some backup services which depend on mounts. I want those > filesystems unmounted when the backup jobs are not running. This is > easily achieved with StopWhenUnneeded. > > I also want to trigger the backup jobs to start when I attach my > external HDD. This is reasonably simple by adding WantedBy=<device> > to the backup service (*not* the mount unit, or it will never be > auto-unmounted).
WantedBy=device sounds like a weird hack to me. I think that it would be better to use SYSTEM_WANTS in udev rules instead. > > So far so good! > > However, this is a headless box and I want to blink an LED when certain > jobs are running, finish or fail. So I need to execute commands in > certain situations. Job failure is easy, I can use OnFailure= and set up > a oneshot service. Job started isn't too bad, I add a ExecStart=- > to my backup service before the real one. OnFailure is fine and ExecStart before starting backup also sounds reasonable. > > Signalling "device is safe to remove" I have not figured out. > Using a chain of blah.device -> blah.mount -> backup-blah.service units, > "safe to remove" LED should only happen after the mount has completed > unmounting, successfully. Is there an existing "hook" or place that I > could put that in this situation? It should be possible to achieve this with normal dependencies. For example, you would have blink-successful.service that would Require backup service and would be ordered after it. Dependencies should then look like this, # backup.service [Unit] Wants=blink-successful.service # blink-successful.service, [Unit] Requires=backup.service After=backup.service backup.service pulls in blink service and that will run only when backup succeeded. > > My temporary solution is to remove the mount unit entirely, define the > mount point in /etc/fstab and use ExecStart and ExecStop in the backup > service to mount and umount before and after the job runs: > > [Unit] > OnFailure=blinkstick-fail.service > [Service] > ExecStart=/bin/mount /media/ipod I'd leave fstab entry in place and replace ExecStart=/bin/mount with RequiresMountsFor=/media/ipod (this belongs to [Unit] section). So when this service is started it will pull in mount unit to transaction and gets ordered after the mount unit. Michal _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/systemd-devel