Am Wed, 25 Feb 2015 07:01:59 -0500 schrieb Rich Freeman : > On Wed, Feb 25, 2015 at 2:50 AM, Marc Joliet wrote: > > Am Tue, 24 Feb 2015 16:44:59 -0500 > > schrieb Rich Freeman : > > > >> > === Timers === > >> > > >> > Can a systemd timer depend on a mount point such that it waits until the mount > >> > point exists before running? Or will it fail after a timeout? I want to > >> > research this myself, but haven't gotten around to it yet. > >> > >> So, timer units are units, and units can have dependencies, and mounts > >> can be dependencies since mounts are units. However, if you set the > >> dependency on the timer itself, then the timer won't start running > >> until the mount exists. You probably want the depencency to be on the > >> service started by the timer (so the timer is watching the clock, but > >> the service won't start without the mount). > > > > Wait, so the timer won't start watching the clock until its dependencies are > > met (i.e, the mount point appears)? Is that what you mean? Because that might > > be more in line with what I want (though I'm not sure yet). > > If you set the dependency on the timer, then the timer doesn't start > watching the clock until they're met. If you set the dependency on > the service started by the timer then it will watch the clock but not > launch the service if the dependency isn't met. You can set the > dependency in either or both places. The timer and the service are > both units. OK, I think I got it. > > > >> If you set a > >> Requires=foo.mount and After=foo.mount, then the service shouldn't run > >> unless foo.mount is available. I suspect systemd will attempt to > >> mount the filesystem when it runs the service, and you'll get units in > >> the failed state if that doesn't work. > >> > >> However, I haven't tested any of this. I suspect it wouldn't take > >> much to work this out. I have a mount dependency in one of my > >> services. Just look at the mount units in /run/systemd/generator for > >> the name of the mount unit systemd is creating from fstab. > > > > Right, so IIUC, I would have a oneshot service that does the backup, and the timer > > runs that, and of course the timer can depend on the mount point. And if the > > mount point doesn't exist, then the service started by the timer will fail. > > > > What I would prefer to have is a timer that only runs if *both* the time *and* > > mount conditions are met. Skimming the man page, this does not seem possible. > > I suppose it would be nice if timers learned "conditions" on which they should > > wait in addition to the time condition, but maybe that's outside the scope of > > systemd? > > I think if you just set the dependency on the service you'll get the > behavior you desire. Systemd will try to mount the backup filesystem, > and if that fails it won't run the backup. > > You can set conditions on units as well, like only running if they're > on AC power or on amd64 or to run one unit the first time you start a > service and a different unit every other time. Some of that was > designed to implement some of the stateless system features they're > adding to systemd. Right, I'll have a look at them. Thanks -- Marc Joliet -- "People who think they know everything really annoy those of us who know we don't" - Bjarne Stroustrup