1SD_NOTIFY(3)                       sd_notify                      SD_NOTIFY(3)
2
3
4

NAME

6       sd_notify, sd_notifyf, sd_pid_notify, sd_pid_notifyf,
7       sd_pid_notify_with_fds - Notify service manager about start-up
8       completion and other service status changes
9

SYNOPSIS

11       #include <systemd/sd-daemon.h>
12
13       int sd_notify(int unset_environment, const char *state);
14
15       int sd_notifyf(int unset_environment, const char *format, ...);
16
17       int sd_pid_notify(pid_t pid, int unset_environment, const char *state);
18
19       int sd_pid_notifyf(pid_t pid, int unset_environment,
20                          const char *format, ...);
21
22       int sd_pid_notify_with_fds(pid_t pid, int unset_environment,
23                                  const char *state, const int *fds,
24                                  unsigned n_fds);
25

DESCRIPTION

27       sd_notify() may be called by a service to notify the service manager
28       about state changes. It can be used to send arbitrary information,
29       encoded in an environment-block-like string. Most importantly, it can
30       be used for start-up completion notification.
31
32       If the unset_environment parameter is non-zero, sd_notify() will unset
33       the $NOTIFY_SOCKET environment variable before returning (regardless of
34       whether the function call itself succeeded or not). Further calls to
35       sd_notify() will then fail, but the variable is no longer inherited by
36       child processes.
37
38       The state parameter should contain a newline-separated list of variable
39       assignments, similar in style to an environment block. A trailing
40       newline is implied if none is specified. The string may contain any
41       kind of variable assignments, but the following shall be considered
42       well-known:
43
44       READY=1
45           Tells the service manager that service startup is finished, or the
46           service finished loading its configuration. This is only used by
47           systemd if the service definition file has Type=notify set. Since
48           there is little value in signaling non-readiness, the only value
49           services should send is "READY=1" (i.e.  "READY=0" is not defined).
50
51       RELOADING=1
52           Tells the service manager that the service is reloading its
53           configuration. This is useful to allow the service manager to track
54           the service's internal state, and present it to the user. Note that
55           a service that sends this notification must also send a "READY=1"
56           notification when it completed reloading its configuration. Reloads
57           are propagated in the same way as they are when initiated by the
58           user.
59
60       STOPPING=1
61           Tells the service manager that the service is beginning its
62           shutdown. This is useful to allow the service manager to track the
63           service's internal state, and present it to the user.
64
65       STATUS=...
66           Passes a single-line UTF-8 status string back to the service
67           manager that describes the service state. This is free-form and can
68           be used for various purposes: general state feedback, fsck-like
69           programs could pass completion percentages and failing programs
70           could pass a human-readable error message. Example:
71           "STATUS=Completed 66% of file system check..."
72
73       ERRNO=...
74           If a service fails, the errno-style error code, formatted as
75           string. Example: "ERRNO=2" for ENOENT.
76
77       BUSERROR=...
78           If a service fails, the D-Bus error-style error code. Example:
79           "BUSERROR=org.freedesktop.DBus.Error.TimedOut"
80
81       MAINPID=...
82           The main process ID (PID) of the service, in case the service
83           manager did not fork off the process itself. Example:
84           "MAINPID=4711"
85
86       WATCHDOG=1
87           Tells the service manager to update the watchdog timestamp. This is
88           the keep-alive ping that services need to issue in regular
89           intervals if WatchdogSec= is enabled for it. See systemd.service(5)
90           for information how to enable this functionality and
91           sd_watchdog_enabled(3) for the details of how the service can check
92           whether the watchdog is enabled.
93
94       WATCHDOG=trigger
95           Tells the service manager that the service detected an internal
96           error that should be handled by the configured watchdog options.
97           This will trigger the same behaviour as if WatchdogSec= is enabled
98           and the service did not send "WATCHDOG=1" in time. Note that
99           WatchdogSec= does not need to be enabled for "WATCHDOG=trigger" to
100           trigger the watchdog action. See systemd.service(5) for information
101           about the watchdog behavior.
102
103       WATCHDOG_USEC=...
104           Reset watchdog_usec value during runtime. Notice that this is not
105           available when using sd_event_set_watchdog() or
106           sd_watchdog_enabled(). Example : "WATCHDOG_USEC=20000000"
107
108       EXTEND_TIMEOUT_USEC=...
109           Tells the service manager to extend the startup, runtime or
110           shutdown service timeout corresponding the current state. The value
111           specified is a time in microseconds during which the service must
112           send a new message. A service timeout will occur if the message
113           isn't received, but only if the runtime of the current state is
114           beyond the original maximum times of TimeoutStartSec=,
115           RuntimeMaxSec=, and TimeoutStopSec=. See systemd.service(5) for
116           effects on the service timeouts.
117
118       FDSTORE=1
119           Stores additional file descriptors in the service manager. File
120           descriptors sent this way will be maintained per-service by the
121           service manager and will later be handed back using the usual file
122           descriptor passing logic at the next invocation of the service, see
123           sd_listen_fds(3). This is useful for implementing services that can
124           restart after an explicit request or a crash without losing state.
125           Any open sockets and other file descriptors which should not be
126           closed during the restart may be stored this way. Application state
127           can either be serialized to a file in /run, or better, stored in a
128           memfd_create(2) memory file descriptor. Note that the service
129           manager will accept messages for a service only if its
130           FileDescriptorStoreMax= setting is non-zero (defaults to zero, see
131           systemd.service(5)). If file descriptors sent are pollable (see
132           epoll_ctl(2)), then any EPOLLHUP or EPOLLERR event seen on them
133           will result in their automatic removal from the store. Multiple
134           arrays of file descriptors may be sent in separate messages, in
135           which case the arrays are combined. Note that the service manager
136           removes duplicate (pointing to the same object) file descriptors
137           before passing them to the service. Use sd_pid_notify_with_fds() to
138           send messages with "FDSTORE=1", see below.
139
140       FDSTOREREMOVE=1
141           Removes file descriptors from the file descriptor store. This field
142           needs to be combined with FDNAME= to specify the name of the file
143           descriptors to remove.
144
145       FDNAME=...
146           When used in combination with FDSTORE=1, specifies a name for the
147           submitted file descriptors. When used with FDSTOREREMOVE=1,
148           specifies the name for the file descriptors to remove. This name is
149           passed to the service during activation, and may be queried using
150           sd_listen_fds_with_names(3). File descriptors submitted without
151           this field set, will implicitly get the name "stored" assigned.
152           Note that, if multiple file descriptors are submitted at once, the
153           specified name will be assigned to all of them. In order to assign
154           different names to submitted file descriptors, submit them in
155           separate invocations of sd_pid_notify_with_fds(). The name may
156           consist of arbitrary ASCII characters except control characters or
157           ":". It may not be longer than 255 characters. If a submitted name
158           does not follow these restrictions, it is ignored.
159
160       It is recommended to prefix variable names that are not listed above
161       with X_ to avoid namespace clashes.
162
163       Note that systemd will accept status data sent from a service only if
164       the NotifyAccess= option is correctly set in the service definition
165       file. See systemd.service(5) for details.
166
167       Note that sd_notify() notifications may be attributed to units
168       correctly only if either the sending process is still around at the
169       time PID 1 processes the message, or if the sending process is
170       explicitly runtime-tracked by the service manager. The latter is the
171       case if the service manager originally forked off the process, i.e. on
172       all processes that match NotifyAccess=main or NotifyAccess=exec.
173       Conversely, if an auxiliary process of the unit sends an sd_notify()
174       message and immediately exits, the service manager might not be able to
175       properly attribute the message to the unit, and thus will ignore it,
176       even if NotifyAccess=all is set for it.
177
178       sd_notifyf() is similar to sd_notify() but takes a printf()-like format
179       string plus arguments.
180
181       sd_pid_notify() and sd_pid_notifyf() are similar to sd_notify() and
182       sd_notifyf() but take a process ID (PID) to use as originating PID for
183       the message as first argument. This is useful to send notification
184       messages on behalf of other processes, provided the appropriate
185       privileges are available. If the PID argument is specified as 0, the
186       process ID of the calling process is used, in which case the calls are
187       fully equivalent to sd_notify() and sd_notifyf().
188
189       sd_pid_notify_with_fds() is similar to sd_pid_notify() but takes an
190       additional array of file descriptors. These file descriptors are sent
191       along the notification message to the service manager. This is
192       particularly useful for sending "FDSTORE=1" messages, as described
193       above. The additional arguments are a pointer to the file descriptor
194       array plus the number of file descriptors in the array. If the number
195       of file descriptors is passed as 0, the call is fully equivalent to
196       sd_pid_notify(), i.e. no file descriptors are passed. Note that sending
197       file descriptors to the service manager on messages that do not expect
198       them (i.e. without "FDSTORE=1") they are immediately closed on
199       reception.
200

RETURN VALUE

202       On failure, these calls return a negative errno-style error code. If
203       $NOTIFY_SOCKET was not set and hence no status message could be sent, 0
204       is returned. If the status was sent, these functions return a positive
205       value. In order to support both service managers that implement this
206       scheme and those which do not, it is generally recommended to ignore
207       the return value of this call. Note that the return value simply
208       indicates whether the notification message was enqueued properly, it
209       does not reflect whether the message could be processed successfully.
210       Specifically, no error is returned when a file descriptor is attempted
211       to be stored using FDSTORE=1 but the service is not actually configured
212       to permit storing of file descriptors (see above).
213

NOTES

215       These APIs are implemented as a shared library, which can be compiled
216       and linked to with the libsystemd pkg-config(1) file.
217
218       These functions send a single datagram with the state string as payload
219       to the AF_UNIX socket referenced in the $NOTIFY_SOCKET environment
220       variable. If the first character of $NOTIFY_SOCKET is "@", the string
221       is understood as Linux abstract namespace socket. The datagram is
222       accompanied by the process credentials of the sending service, using
223       SCM_CREDENTIALS.
224

ENVIRONMENT

226       $NOTIFY_SOCKET
227           Set by the service manager for supervised processes for status and
228           start-up completion notification. This environment variable
229           specifies the socket sd_notify() talks to. See above for details.
230

EXAMPLES

232       Example 1. Start-up Notification
233
234       When a service finished starting up, it might issue the following call
235       to notify the service manager:
236
237           sd_notify(0, "READY=1");
238
239       Example 2. Extended Start-up Notification
240
241       A service could send the following after completing initialization:
242
243           sd_notifyf(0, "READY=1\n"
244                   "STATUS=Processing requests...\n"
245                   "MAINPID=%lu",
246                   (unsigned long) getpid());
247
248       Example 3. Error Cause Notification
249
250       A service could send the following shortly before exiting, on failure:
251
252           sd_notifyf(0, "STATUS=Failed to start up: %s\n"
253                   "ERRNO=%i",
254                   strerror(errno),
255                   errno);
256
257       Example 4. Store a File Descriptor in the Service Manager
258
259       To store an open file descriptor in the service manager, in order to
260       continue operation after a service restart without losing state, use
261       "FDSTORE=1":
262
263           sd_pid_notify_with_fds(0, 0, "FDSTORE=1\nFDNAME=foobar", &fd, 1);
264

SEE ALSO

266       systemd(1), sd-daemon(3), sd_listen_fds(3),
267       sd_listen_fds_with_names(3), sd_watchdog_enabled(3), daemon(7),
268       systemd.service(5)
269
270
271
272systemd 243                                                       SD_NOTIFY(3)
Impressum