Gentoo Archives: gentoo-amd64

From: Rich Freeman <rich0@g.o>
To: gentoo-amd64@l.g.o
Subject: Re: [gentoo-amd64] Systemd migration: opinion and questions
Date: Wed, 25 Feb 2015 12:02:02
Message-Id: CAGfcS_=0=80iA2OfiWz61YLw=qB3_nsu1DOTHLemOU=YPa1Cpw@mail.gmail.com
In Reply to: Re: [gentoo-amd64] Systemd migration: opinion and questions by Marc Joliet
1 On Wed, Feb 25, 2015 at 2:50 AM, Marc Joliet <marcec@×××.de> wrote:
2 > Am Tue, 24 Feb 2015 16:44:59 -0500
3 > schrieb Rich Freeman <rich0@g.o>:
4 >
5 >> > === Timers ===
6 >> >
7 >> > Can a systemd timer depend on a mount point such that it waits until the mount
8 >> > point exists before running? Or will it fail after a timeout? I want to
9 >> > research this myself, but haven't gotten around to it yet.
10 >>
11 >> So, timer units are units, and units can have dependencies, and mounts
12 >> can be dependencies since mounts are units. However, if you set the
13 >> dependency on the timer itself, then the timer won't start running
14 >> until the mount exists. You probably want the depencency to be on the
15 >> service started by the timer (so the timer is watching the clock, but
16 >> the service won't start without the mount).
17 >
18 > Wait, so the timer won't start watching the clock until its dependencies are
19 > met (i.e, the mount point appears)? Is that what you mean? Because that might
20 > be more in line with what I want (though I'm not sure yet).
21
22 If you set the dependency on the timer, then the timer doesn't start
23 watching the clock until they're met. If you set the dependency on
24 the service started by the timer then it will watch the clock but not
25 launch the service if the dependency isn't met. You can set the
26 dependency in either or both places. The timer and the service are
27 both units.
28
29 >
30 >> If you set a
31 >> Requires=foo.mount and After=foo.mount, then the service shouldn't run
32 >> unless foo.mount is available. I suspect systemd will attempt to
33 >> mount the filesystem when it runs the service, and you'll get units in
34 >> the failed state if that doesn't work.
35 >>
36 >> However, I haven't tested any of this. I suspect it wouldn't take
37 >> much to work this out. I have a mount dependency in one of my
38 >> services. Just look at the mount units in /run/systemd/generator for
39 >> the name of the mount unit systemd is creating from fstab.
40 >
41 > Right, so IIUC, I would have a oneshot service that does the backup, and the timer
42 > runs that, and of course the timer can depend on the mount point. And if the
43 > mount point doesn't exist, then the service started by the timer will fail.
44 >
45 > What I would prefer to have is a timer that only runs if *both* the time *and*
46 > mount conditions are met. Skimming the man page, this does not seem possible.
47 > I suppose it would be nice if timers learned "conditions" on which they should
48 > wait in addition to the time condition, but maybe that's outside the scope of
49 > systemd?
50
51 I think if you just set the dependency on the service you'll get the
52 behavior you desire. Systemd will try to mount the backup filesystem,
53 and if that fails it won't run the backup.
54
55 You can set conditions on units as well, like only running if they're
56 on AC power or on amd64 or to run one unit the first time you start a
57 service and a different unit every other time. Some of that was
58 designed to implement some of the stateless system features they're
59 adding to systemd.
60
61 --
62 Rich

Replies

Subject Author
Re: [gentoo-amd64] Systemd migration: opinion and questions Marc Joliet <marcec@×××.de>