X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=man%2Fsd_notify.xml;h=2bf3383c0db38793eccfcbecdbf86796b06603dc;hp=7c1d982d855e4f37654ce653f9fd600bac7cdcfe;hb=a2e0337875addaf08225fbf9b231435ba12a88b5;hpb=ad678a066b4ba5d8914dd7d5a4093572841205cf diff --git a/man/sd_notify.xml b/man/sd_notify.xml index 7c1d982d8..2bf3383c0 100644 --- a/man/sd_notify.xml +++ b/man/sd_notify.xml @@ -8,20 +8,21 @@ Copyright 2010 Lennart Poettering systemd is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. systemd is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + Lesser General Public License for more details. - You should have received a copy of the GNU General Public License + You should have received a copy of the GNU Lesser General Public License along with systemd; If not, see . --> - + sd_notify @@ -45,12 +46,15 @@ sd_notify sd_notifyf - Notify init system about start-up completion and other daemon status changes + sd_pid_notify + sd_pid_notifyf + sd_pid_notify_with_fds + Notify service manager about start-up completion and other service status changes - #include "sd-daemon.h" + #include <systemd/sd-daemon.h> int sd_notify @@ -64,22 +68,46 @@ const char *format ... + + + int sd_pid_notify + pid_t pid + int unset_environment + const char *state + + + + int sd_pid_notifyf + pid_t pid + int unset_environment + const char *format + ... + + + + int sd_pid_notify_with_fds + pid_t pid + int unset_environment + const char *state + const int *fds + unsigned n_fds + Description - sd_notify() shall be called - by a daemon to notify the init system about status - changes. It can be used to send arbitrary information, - encoded in an environment-block-like string. Most - importantly it can be used for start-up completion - notification. + sd_notify() may be called + by a service to notify the service manager about + state changes. It can be used to send arbitrary + information, encoded in an environment-block-like + string. Most importantly it can be used for start-up + completion notification. If the unset_environment - parameter is non-zero sd_notify() + parameter is non-zero, sd_notify() will unset the $NOTIFY_SOCKET - environment variable before returning (regardless + environment variable before returning (regardless of whether the function call itself succeeded or not). Further calls to sd_notify() will then fail, but @@ -87,7 +115,7 @@ processes. The state parameter - should contain an newline-seperated list of variable + should contain a newline-separated list of variable assignments, similar in style to an environment block. A trailing newline is implied if none is specified. The string may contain any kind of variable @@ -98,77 +126,195 @@ READY=1 - Tells the init system - that daemon startup is finished. This - is only used by systemd if the service - definition file has Type=notify - set. The passed argument is a boolean - "1" or "0". Since there is little - value in signalling non-readiness, the - only value daemons should send is - "READY=1". + Tells the service + manager that service startup is + finished. This is only used by systemd + if the service definition file has + Type=notify set. Since there is little + value in signaling non-readiness, the + only value services should send is + READY=1 + (i.e. READY=0 is + not defined). + + + + RELOADING=1 + + Tells the service manager + that the service is reloading its + configuration. This is useful to allow + the service manager to track the service's + internal state, and present it to the + user. Note that a service that sends + this notification must also send a + READY=1 + notification when it completed + reloading its + configuration. + + + + STOPPING=1 + + Tells the service manager + that the service is beginning its + shutdown. This is useful to allow the + service manager to track the service's + internal state, and present it to the + user. STATUS=... Passes a single-line - status string back to the init system - that describes the daemon state. This + UTF-8 status string back to the service manager + that describes the service state. This is free-form and can be used for various purposes: general state feedback, fsck-like programs could pass completion percentages and failing programs could pass a human readable error message. Example: - "STATUS=Completed 66% of file system - check..." + STATUS=Completed 66% of file + system + check... ERRNO=... - If a daemon fails, the + If a service fails, the errno-style error code, formatted as - string. Example: "ERRNO=2" for + string. Example: ERRNO=2 for ENOENT. BUSERROR=... - If a daemon fails, the + If a service fails, the D-Bus error-style error code. Example: - "BUSERROR=org.freedesktop.DBus.Error.TimedOut" + BUSERROR=org.freedesktop.DBus.Error.TimedOut MAINPID=... - The main pid of the - daemon, in case the init system did + The main process ID (PID) of the + service, in case the service manager did not fork off the process itself. Example: - "MAINPID=4711" + MAINPID=4711 + + + + WATCHDOG=1 + + Tells the service manager to + update the watchdog timestamp. This is + the keep-alive ping that services need + to issue in regular intervals if + WatchdogSec= is + enabled for it. See + systemd.service5 + for information how to enable this + functionality and + sd_watchdog_enabled3 + for the details of how the service can + check if the the watchdog is enabled. + + + + + + FDSTORE=1 + + Stores additional file + descriptors in the service + manager. File descriptors sent this + way will be maintained per-service by + the service manager and be passed + again using the usual file descriptor + passing logic on the next invocation + of the service (see + sd_listen_fds3). This + is useful for implementing service + restart schemes where services + serialize their state to + /run, push their + file descriptors to the system + manager, and are then restarted, + retrieving their state again via + socket passing and + /run. Note that + the service manager will accept + messages for a service only if + FileDescriptorStoreMax= + is set to non-zero for it (defaults to + zero). See + systemd.service5 + for details. Multiple arrays of file + descriptors may be sent in seperate + messages, in which case the arrays are + combined. Note that the service + manager removes duplicate file + descriptors before passing them to the + service. Use + sd_pid_notify_with_fds() + to send messages with + FDSTORE=1, see + below. + It is recommended to prefix variable names that - are not shown in the list above with - X_ to avoid namespace - clashes. + are not listed above with X_ to + avoid namespace clashes. Note that systemd will accept status data sent - from a daemon only if the + from a service only if the NotifyAccess= option is correctly set in the service definition file. See systemd.service5 for details. sd_notifyf() is similar to - sd_notifyf() but takes a + sd_notify() but takes a printf()-like format string plus arguments. + + sd_pid_notify() and + sd_pid_notifyf() are similar to + sd_notify() and + sd_notifyf() but take a process + ID (PID) to use as originating PID for the message as + first argument. This is useful to send notification + messages on behalf of other processes, provided the + appropriate privileges are available. If the PID + argument is specified as 0 the process ID of the + calling process is used, in which case the calls are + fully equivalent to sd_notify() + and sd_notifyf(). + + sd_pid_notify_with_fds() is + similar to sd_pid_notify() but + takes an additional array of file descriptors. These + file descriptors are sent along the notification + message to the service manager. This is particularly + useful for sending FDSTORE=1 + messages, as described above. The additional arguments + are a pointer to the file descriptor array plus the + number of file descriptors in the array. If the number + of file descriptors is passed as 0, the call is fully + equivalent to sd_pid_notify(), + i.e. no file descriptors are passed. Note that sending + file descriptors to the service manager on messages + that do not expect them (i.e. without + FDSTORE=1) they are immediately + closed on reception. @@ -178,63 +324,37 @@ errno-style error code. If $NOTIFY_SOCKET was not set and hence no status data could be sent, 0 is returned. If - the status was sent these functions return with a + the status was sent, these functions return with a positive return value. In order to support both, init systems that implement this scheme and those which - don't, it is generally recommended to ignore the return + do not, it is generally recommended to ignore the return value of this call. Notes - These functions are provided by the reference - implementation of APIs for new-style daemons and - distributed with the systemd package. The algorithms - they implement are simple, and can easily be - reimplemented in daemons if it is important to support - this interface without using the reference - implementation. + Internally, these functions send a single datagram with the state string as payload to the - AF_UNIX socket referenced in the + AF_UNIX socket referenced in the $NOTIFY_SOCKET environment variable. If the first character of - $NOTIFY_SOCKET is @ the string is + $NOTIFY_SOCKET is @, the string is understood as Linux abstract namespace socket. The datagram is accompanied by the process credentials of - the sending daemon, using SCM_CREDENTIALS. - - For details about the algorithm check the - liberally licensed reference implementation sources: - - resp. - - sd_notify() and - sd_notifyf() are implemented in - the reference implementation's drop-in - sd-daemon.c and - sd-daemon.h files. It is - recommended that applications consuming these APIs - copy the implementation into their source tree. For - more details about the reference implementation see - sd_daemon7 - - If -DDISABLE_SYSTEMD is set during compilation - this function will always return 0 and otherwise - become a NOP. + the sending service, using SCM_CREDENTIALS. Environment - + $NOTIFY_SOCKET - Set by the init system + Set by the service manager for supervised processes for status and start-up completion notification. This environment variable @@ -251,9 +371,9 @@ Start-up Notification - When a daemon finished starting up, it + When a service finished starting up, it might issue the following call to notify - the init system: + the service manager: sd_notify(0, "READY=1"); @@ -261,7 +381,7 @@ Extended Start-up Notification - A daemon could send the following after + A service could send the following after completing initialization: sd_notifyf(0, "READY=1\n" @@ -273,22 +393,35 @@ Error Cause Notification - A daemon could send the following shortly before exiting, on failure + A service could send the following shortly before exiting, on failure: sd_notifyf(0, "STATUS=Failed to start up: %s\n" "ERRNO=%i", strerror(errno), errno); + + + Store a File Descriptor in the Service Manager + + To store an open file descriptor in the + service manager, in order to continue + operation after a service restart without + losing state use + FDSTORE=1: + + sd_pid_notify_with_fds(0, 0, "FDSTORE=1", &fd, 1); + See Also systemd1, - sd_daemon7, + sd-daemon3, daemon7, - systemd.service5 + systemd.service5, + sd_watchdog_enabled3