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 |