24 November 2013 2:03 PM (systemd | mpd | config)
Systemd allows you to specify a program to run before running the main
daemon (or program) with ExecStartPre. This can, for instance, be used
to run a mount command before starting mpd. By adding under the
[Service] heading:
ExecStartPre=/usr/bin/mount /mnt/music
Now I have already setup my fstab to know what to mount on /mnt/music,
but of course that shouldn't be necessary. According to the
systemd.service(5) man page it uses the same syntax as ExecStart,
which tells us that one must use absolute file names since no shell is
used to start them.
This also has the effect of stopping the ExecStart part from the
.service from being executed if the ExecStartPre doesn't finish
successfully. Which works out great in my case as I don't want to
start mpd if my music directory didn't mount. If you want to ignore
the exit status of (one of) the ExecStartPre commands you can prefix
it with a -, for example:
ExecStartPre=-/usr/bin/mount /mnt/music
Which would continue running the ExecStart even if mounting failed.
Also know that there can be multiple ExecStartPre options and they
will be executed serially, so for example:
ExecStartPre=/usr/bin/mount /mnt/music ExecStartPre=-/usr/bin/mount /mnt/music2
This would fail if /mnt/music doesn't mount, but would continue just
fine if /mnt/music did and /mnt/music2 didn't.