[systemd-devel] How to prevent sleep during running oneshot units

Kai Krakow hurikhan77 at gmail.com
Tue Feb 11 16:30:59 PST 2014

Hey there!

I've got a daily backup job scheduled using a timer unit and a oneshot 
service file. This backup takes around 2-4 hours. It's using rsync and syncs 
from btrfs HDD to a snapshotted btrfs on USB with inplace deltas. I'm 
mentioning this because it may matter.

I've also set my system to auto-sleep after 4 hours of idle time. This 
means, in KDE I've set the option to put the system to sleep after that time 
of inactivity.

This usually works fine. But sometimes during backup, the system cannot 
sleep. I see it still powered fully on the next morning. In dmesg, a lot of 
btrfs and blockdev related tracebacks accumulated with notes of being unable 
to sleep because a processed has refused to stop. I don't know if this is 
btrfs-related or not - but actually I don't think it's wise to go to sleep 
while the backup process is still running either.

There may be a bug here, because almost every time when that happened it 
looks like systemd has suspended my network connection but didn't bring it 
back online after the system refused to go to sleep. I need to restart 
NetworkManager then or reboot (I prefer reboot to alleviate any other side 
effects that may have had).

But what actually results from this is the following question: How do I 
prevent systemd from trying to go to sleep while the backup job is running? 
I'd like it to either (a) do not go to sleep at all (do not even try) or (b) 
defer the sleeping signal until the backup job finished, with (b) preferred 
plus some grace time.

I don't know if something like "Conflicts=sleep.target" would do the job, I 
even do not know if that would be a good idea at all.

Ah, and then another one, more or less unrelated: Lennart one time told me 
that it's on the feature plan for systemd to wake the system up for selected 
timer units and put it back to sleep afterwards. It would be a nice-to-have. 
Still on the feature list? Maybe any news on that? I'd like to test it.

Another one, partially unrelated: I've set up the backup mount point with 
automount in systemd (via fstab). Is it possible to automatically undo that 
automount upon finishing the backup job? If I explicitly call umount, the 
job could wait forever if I accidently left a shell open in that directory. 
This more or less concludes to the question: Could automount units also 
automatically unmount after some idle time (after nothing any longer 
accessed the volume)?

Replies to list only preferred.

More information about the systemd-devel mailing list