From 7fe7f969457861263a8eb263b7b7d1d926ef22ae Mon Sep 17 00:00:00 2001 From: Carl Dong Date: Thu, 1 Sep 2022 13:39:47 -0400 Subject: [PATCH] contrib/init: Better systemd integration 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. 3. Also make systemd aware of when bitcoind is stopping by specifying -shutdownnotify='systemd-notify --stopping' Note that we currently don't allow multiple *notify 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; mystartupcommandhere' \ -shutdownnotify='systemd-notify --stopping; myshutdowncommandhere' --- contrib/init/BGLd.service | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/contrib/init/BGLd.service b/contrib/init/BGLd.service index 4207a28981..467044ea36 100644 --- a/contrib/init/BGLd.service +++ b/contrib/init/BGLd.service @@ -18,10 +18,11 @@ After=network-online.target Wants=network-online.target [Service] -ExecStart=/usr/bin/BGLd -daemon \ - -pid=/run/BGLd/BGLd.pid \ +ExecStart=/usr/bin/BGLd -pid=/run/BGLd/BGLd.pid \ -conf=/etc/BGL/BGL.conf \ - -datadir=/var/lib/BGLd + -datadir=/var/lib/BGLd \ + -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 BGL /etc/BGL # Process management #################### -Type=forking +Type=notify +NotifyAccess=all PIDFile=/run/BGLd/BGLd.pid + Restart=on-failure TimeoutStartSec=infinity TimeoutStopSec=600