On 12 Jun 2017 17:03, "Matthew Miller" <mattdm(a)mattdm.org> wrote:
On Mon, Jun 12, 2017 at 03:47:46PM +0000, James Pearson wrote:
> I'm guessing I could use something like:
>
> After=autofs.service
> Before=graphical.target
>
> Is this correct?
>
> However, I would like to use the same systemd unit file on servers that
> won't run X - will the above work? Or is there a better/another way of
> doing this?
You probably want "display-manager.service" instead of
"graphical.target".
You also will want "Requires=autofs.service". The distinction between
"After/Before" and "Requires" is exactly for the reason you give; the
ordering directives don't require anything, so without
display-manager.service enabled, Before=display-manager.service is just
a no-op. Actually, you might even want "BindsTo=autofs.service", which
is stronger.
Depending on your setup, you many want to look at converting your
automatic mounts into systemd mounts, and depend on that directly,
rather than on the autofs service.
Just one little thing to note here that many don't realise. All mounts in
the system (ie not manually via the mount command) are systemd mounts.
There's a generator that makes mount units from fstab and it is the actual
runtime mount unit that gets used.
So with things in fstab you can still have a service require something like
data.mount ... There's even a directive RequiresMountsFor to ensure that a
path is mounted before that unit is started.
Finally autofs is made even easier with systemd as all you need to do to
declare a mount autofs is x-systemd.automount in the options field and then
it'll only be mounted on demand rather than at boot.