Merge bitcoin/bitcoin#25975: contrib/init: Better systemd integration

689a65d878 contrib/init: Better systemd integration (Carl Dong)

Pull request description:

  ```
  1. Make logs available to journalctl (systemd's logging system) by not
     specifying -daemonwait, which rightfully has its own set of stdout
     and stderr descriptors (a user invoking with -daemonwait on the
     command line should not see any logs). It makes more sense not to
     daemonize in the systemd context anyway.

  2. Make systemd aware of when bitcoind is started and in steady state by
     specifying -startupnotify='systemd-notify --ready' and Type=notify.
     NotifyAccess=all is necessary so that the spawned thread for
     startupnotify is allowed to inform systemd of bitcoind's readiness.

     Note that NotifyAccess=exec won't work because it only allows
     sd_notify readiness signalling from Exec*= declarations in the
     .service file.

  Note that we currently don't allow multiple startupnotify commands, but
  users can override it in systemd via:

    # systemctl edit bitcoind

  By specifying something like:

    [Service]
    ExecStart=/usr/bin/bitcoind -pid=/run/bitcoind/bitcoind.pid \
                                -conf=/etc/bitcoin/bitcoin.conf \
                                -datadir=/var/lib/bitcoind \
                                -startupnotify='systemd-notify --ready; mycommandhere'
  ```

ACKs for top commit:
  real-or-random:
    ACK 689a65d878 tested this service file with 25.0

Tree-SHA512: 9a52ad5cf25886c0d8dabc986d8920602a056db25875b5edd910b387043b78bb78c76d6df82e6e322e3be3bfd5c35c80721cbc8308cec946060bd7586820e9c6
This commit is contained in:
fanquake 2023-05-29 13:43:27 +01:00
commit 769dd1e826
No known key found for this signature in database
GPG key ID: 2EEB9F5CC09526C1

View file

@ -18,10 +18,11 @@ After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/bin/bitcoind -daemonwait \
-pid=/run/bitcoind/bitcoind.pid \
ExecStart=/usr/bin/bitcoind -pid=/run/bitcoind/bitcoind.pid \
-conf=/etc/bitcoin/bitcoin.conf \
-datadir=/var/lib/bitcoind
-datadir=/var/lib/bitcoind \
-startupnotify='systemd-notify --ready' \
-shutdownnotify='systemd-notify --stopping'
# Make sure the config directory is readable by the service user
PermissionsStartOnly=true
@ -30,8 +31,10 @@ ExecStartPre=/bin/chgrp bitcoin /etc/bitcoin
# Process management
####################
Type=forking
Type=notify
NotifyAccess=all
PIDFile=/run/bitcoind/bitcoind.pid
Restart=on-failure
TimeoutStartSec=infinity
TimeoutStopSec=600