[systemd-devel] Antw: Re: Mutually exclusive (timer-triggered) services

Alexander Koch mail at alexanderkoch.net
Wed Oct 16 14:14:48 UTC 2019


>>>> * flock leaves the lock file behind so you'd need some type of
>>>> cleanup in case you really want the jobs to be trace-free. This is
>>>> not as trivial is it might seem, e.g. you cannot do it from the
>>>> service units themselves in `ExecStartPost=` or similar.
>>> An
>>> 
>>> ExecStartPost=-/usr/bin/flock -F /path/to/lock.file \
>>>               /usr/bin/rm /path/to/lock.file
>>> 
>>> should solve this issue.
>> 
>> So you can remove a file other processes are blocked lock-waiting on?
>> Didn't
>> expect this to work, thanks for the hint.
> 
> It's a common misconception (especially when grown up with Windows)
> that "rm" removes a file: Actually it "unlinks" the name from the
> inode. As long as the inode is opened by the kernel, the file (as seen
> from the kernel's perspective) still exists.

I haven't really grown up with Windows ;P

Assuming `flock` (the binary) uses the flock() syscall it still needs to 
go
through VFS to get a file descriptor. So if a second process calls 
`flock`
after the first one has already unlinked the name from the inode, the 
lock
file will not be found and thus be re-created, breaking the locking
mechanism.

Or did I miss something and the second flock somehow obtains the inode
number of the old lock?


Best regards,

Alex



More information about the systemd-devel mailing list