diff options
Diffstat (limited to 'man/systemd-notify.xml')
-rw-r--r-- | man/systemd-notify.xml | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/man/systemd-notify.xml b/man/systemd-notify.xml index a5f4077166..8c56a6b8ed 100644 --- a/man/systemd-notify.xml +++ b/man/systemd-notify.xml @@ -72,10 +72,24 @@ <para>The command line may carry a list of environment variables to send as part of the status update.</para> - <para>Note that systemd will refuse reception of status updates - from this command unless <varname>NotifyAccess=all</varname> is - set for the service unit this command is called from.</para> - + <para>Note that systemd will refuse reception of status updates from this command unless + <varname>NotifyAccess=</varname> is set for the service unit this command is called from.</para> + + <para>Note that <function>sd_notify()</function> notifications may be attributed to units correctly only if either + the sending process is still around at the time PID 1 processes the message, or if the sending process is + explicitly runtime-tracked by the service manager. The latter is the case if the service manager originally forked + off the process, i.e. on all processes that match <varname>NotifyAccess=</varname><option>main</option> or + <varname>NotifyAccess=</varname><option>exec</option>. Conversely, if an auxiliary process of the unit sends an + <function>sd_notify()</function> message and immediately exits, the service manager might not be able to properly + attribute the message to the unit, and thus will ignore it, even if + <varname>NotifyAccess=</varname><option>all</option> is set for it.</para> + + <para><command>systemd-notify</command> will first attempt to invoke <function>sd_notify()</function> pretending to + have the PID of the invoking process. This will only succeed when invoked with sufficient privileges. On failure, + it will then fall back to invoking it under its own PID. This behaviour is useful in order that when the tool is + invoked from a shell script the shell process — and not the <command>systemd-notify</command> process — appears as + sender of the message, which in turn is helpful if the shell process is the main process of a service, due to the + limitations of <varname>NotifyAccess=</varname><option>all</option> described above.</para> </refsect1> <refsect1> @@ -112,7 +126,7 @@ <listitem><para>Send a free-form status string for the daemon to the init systemd. This option takes the status string as argument. This is equivalent to <command>systemd-notify - STATUS=...</command>. For details about the semantics of this + STATUS=…</command>. For details about the semantics of this option see <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para></listitem> </varlistentry> @@ -158,15 +172,15 @@ <programlisting>#!/bin/bash mkfifo /tmp/waldo -systemd-notify --ready --status="Waiting for data..." +systemd-notify --ready --status="Waiting for data…" while : ; do read a < /tmp/waldo systemd-notify --status="Processing $a" - # Do something with $a ... + # Do something with $a … - systemd-notify --status="Waiting for data..." + systemd-notify --status="Waiting for data…" done</programlisting> </example> </refsect1> |