On Fr, 02.08.19 13:24, Johannes Ernst (johannes.er...@gmail.com) wrote: > I have a oneshot .service (certbot) that is run by its .timer with: > > OnCalendar=daily > RandomizedDelaySec=1day > > I also have a sometimes long-running script that may modify the same > data. So the script and the oneshot service should never run at the > same time. > > Is there a good systemd pattern for some kind of semaphore-like > thing that will delay the execution of the oneshot service and try > again when the script is done running? > > I could skip execution, but then I miss an entire day until the > service is run again -- I’d prefer it if it tried again a few > minutes later. Or I could poll for some flag before running the main > part of the service. Wondering whether there something more > systemd-native.
Maybe change the service program invoked by the timer unit to use file locking of some kind early on. I mean, if you have shared data on disk and want to synchronize access to it then a file lock is the concept of choice really. If this is a proper program (i.e. not a shell script) maybe just use a BSD file lock (flock(2)) on the top-level directory you store your data in. If these are shell scripts you should be able to use util-linux' flock tool, you could even prefix your ExecStart= line with that if you want. But no, systemd does not provide any mechanism to do file locking for you. Lennart -- Lennart Poettering, Berlin _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/systemd-devel