examples/unicorn@.service: note the NonBlocking flag
commit5e3d05997769dd270123b9c2479938704de078de
authorEric Wong <e@80x24.org>
Wed, 3 Jul 2019 23:34:31 +0000 (3 23:34 +0000)
committerEric Wong <e@80x24.org>
Wed, 3 Jul 2019 23:34:31 +0000 (3 23:34 +0000)
tree8692b46b89a0e1481703c6a1c6b0c8b5b8182f57
parent2ea6af4ed1ce5f3a34bdfd32b9e54a67fabcff26
examples/unicorn@.service: note the NonBlocking flag

It's racy otherwise when starting simultaneous instanced units.
Without specifying NonBlocking=true, systemd will clear the
O_NONBLOCK flag every time it starts a new service instance.
There's a small window where systemd can clear O_NONBLOCK
immediately after it's set by Ruby (or kgio):

unicorn@1                  |systemd         |unicorn@2
---------------------------+----------------+--------------------
F_SETFL, O_NONBLOCK|O_RDWR |                | (not running, yet)
                           |F_SETFL, O_RDWR |
                           |fork            |
   | exec unicorn@2 |
accept4(...)    # blocks!  |                | (now started by systemd)
                           |                |F_SETFL,O_NONBLOCK|O_RDWR
                           |                |accept4(...) non-blocking
examples/unicorn@.service