summaryrefslogtreecommitdiff
path: root/man/sd_watchdog_enabled.xml
blob: 462d7c66176c6a26775eb58416df1c7156ae0152 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
<?xml version='1.0'?> <!--*-nxml-*-->
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
        "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">

<!--
  This file is part of systemd.

  Copyright 2013 Lennart Poettering

  systemd is free software; you can redistribute it and/or modify it
  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
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public License
  along with systemd; If not, see <http://www.gnu.org/licenses/>.
-->

<refentry id="sd_watchdog_enabled"
        xmlns:xi="http://www.w3.org/2001/XInclude">

        <refentryinfo>
                <title>sd_watchdog_enabled</title>
                <productname>systemd</productname>

                <authorgroup>
                        <author>
                                <contrib>Developer</contrib>
                                <firstname>Lennart</firstname>
                                <surname>Poettering</surname>
                                <email>lennart@poettering.net</email>
                        </author>
                </authorgroup>
        </refentryinfo>

        <refmeta>
                <refentrytitle>sd_watchdog_enabled</refentrytitle>
                <manvolnum>3</manvolnum>
        </refmeta>

        <refnamediv>
                <refname>sd_watchdog_enabled</refname>
                <refpurpose>Check whether the service manager expects watchdog keep-alive notifications from a service</refpurpose>
        </refnamediv>

        <refsynopsisdiv>
                <funcsynopsis>
                        <funcsynopsisinfo>#include &lt;systemd/sd-daemon.h&gt;</funcsynopsisinfo>

                        <funcprototype>
                                <funcdef>int <function>sd_watchdog_enabled</function></funcdef>
                                <paramdef>int <parameter>unset_environment</parameter></paramdef>
                                <paramdef>uint64_t *<parameter>usec</parameter></paramdef>
                        </funcprototype>
                </funcsynopsis>
        </refsynopsisdiv>

        <refsect1>
                <title>Description</title>
                <para><function>sd_watchdog_enabled()</function> may
                be called by a service to detect whether the service
                manager expects regular keep-alive watchdog
                notification events from it, and the timeout after
                which the manager will act on the service if it did
                not get such a notification.</para>

                <para>If the <varname>$WATCHDOG_USEC</varname>
                environment variable is set, and the
                <varname>$WATCHDOG_PID</varname> variable is unset or
                set to the PID of the current process, the service
                manager expects notifications from this process. The
                manager will usually terminate a service when it does
                not get a notification message within the specified
                time after startup and after each previous message. It
                is recommended that a daemon sends a keep-alive
                notification message to the service manager every half
                of the time returned here. Notification messages may
                be sent with
                <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>
                with a message string of
                <literal>WATCHDOG=1</literal>.</para>

                <para>If the <parameter>unset_environment</parameter>
                parameter is non-zero,
                <function>sd_watchdog_enabled()</function> will unset
                the <varname>$WATCHDOG_USEC</varname> and
                <varname>$WATCHDOG_PID</varname> environment variables
                before returning (regardless of whether the function
                call itself succeeded or not). Those variables are no
                longer inherited by child processes. Further calls to
                <function>sd_watchdog_enabled()</function> will also
                return with zero.</para>

                <para>If the <parameter>usec</parameter> parameter is
                non-NULL, <function>sd_watchdog_enabled()</function>
                will write the timeout in µs for the watchdog
                logic to it.</para>

                <para>To enable service supervision with the watchdog
                logic, use <varname>WatchdogSec=</varname> in service
                files. See
                <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
                for details.</para>
        </refsect1>

        <refsect1>
                <title>Return Value</title>

                <para>On failure, this call returns a negative
                errno-style error code. If the service manager expects
                watchdog keep-alive notification messages to be sent,
                &gt; 0 is returned, otherwise 0 is returned. Only if
                the return value is &gt; 0, the
                <parameter>usec</parameter> parameter is valid after
                the call.</para>
        </refsect1>

        <refsect1>
                <title>Notes</title>

                <xi:include href="libsystemd-pkgconfig.xml" xpointer="pkgconfig-text"/>

                <para>Internally, this functions parses the
                <varname>$WATCHDOG_PID</varname> and
                <varname>$WATCHDOG_USEC</varname> environment
                variable. The call will ignore these variables if
                <varname>$WATCHDOG_PID</varname> does containe the PID
                of the current process, under the assumption that in
                that case, the variables were set for a different
                process further up the process tree.</para>
        </refsect1>

        <refsect1>
                <title>Environment</title>

                <variablelist class='environment-variables'>
                        <varlistentry>
                                <term><varname>$WATCHDOG_PID</varname></term>

                                <listitem><para>Set by the system
                                manager for supervised process for
                                which watchdog support is enabled, and
                                contains the PID of that process. See
                                above for details.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term><varname>$WATCHDOG_USEC</varname></term>

                                <listitem><para>Set by the system
                                manager for supervised process for
                                which watchdog support is enabled, and
                                contains the watchdog timeout in µs
                                See above for
                                details.</para></listitem>
                        </varlistentry>
                </variablelist>
        </refsect1>

        <refsect1>
                <title>History</title>

                <para>The watchdog functionality and the
                <varname>$WATCHDOG_USEC</varname> variable were
                added in systemd-41.</para>

                <para><function>sd_watchdog_enabled()</function>
                function was added in systemd-209. Since that version
                the <varname>$WATCHDOG_PID</varname> variable is also
                set.</para>
        </refsect1>

        <refsect1>
                <title>See Also</title>
                <para>
                        <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
                        <citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
                        <citerefentry><refentrytitle>daemon</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
                        <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
                        <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>
                </para>
        </refsect1>

</refentry>