summaryrefslogtreecommitdiffstats
path: root/articles/mounting_music_dir_before_mpd.org
blob: 7551dc2e4ab3c687de19730f216025daea7d235f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#+TITLE:
#+STARTUP: showall

* Mounting music dir before MPD                   :systemd:mpd:config:
  :PROPERTIES:
  :PUBDATE:  <2013-11-24 Sun 14:03>
  :END:

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:

#+BEGIN_SRC conf-unix
  ExecStartPre=/usr/bin/mount /mnt/music
#+END_SRC

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:

#+BEGIN_SRC conf-unix
  ExecStartPre=-/usr/bin/mount /mnt/music
#+END_SRC

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:

#+BEGIN_SRC conf-unix
  ExecStartPre=/usr/bin/mount /mnt/music
  ExecStartPre=-/usr/bin/mount /mnt/music2
#+END_SRC

This would fail if ~/mnt/music~ doesn't mount, but would continue just
fine if ~/mnt/music~ did and ~/mnt/music2~ didn't.