systemctl: make "systemctl is-system-running" return "offline" if we are not booted with systemd

This sounds like the better place to expose this than in "systemd-notify
--booted".

Also document the so far undocumented "unknown" state the command might
return. And rearrange the table of states documented to be more like the
one for "is-running".

Also, don't document the precise exit code of this function, just say
errors are reported != 0 or > 0...
This commit is contained in:
Lennart Poettering 2015-09-23 17:04:43 +02:00
parent 16f98462a0
commit 94f099d813
3 changed files with 49 additions and 14 deletions

View File

@ -1120,9 +1120,9 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
<tgroup cols='3'>
<thead>
<row>
<entry>Printed string</entry>
<entry>Meaning</entry>
<entry>Return value</entry>
<entry>Name</entry>
<entry>Description</entry>
<entry>Exit Code</entry>
</row>
</thead>
<tbody>
@ -1137,7 +1137,7 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
<row>
<entry><literal>linked</literal></entry>
<entry morerows='1'>Made available through a symlink to the unit file (permanently or just in <filename>/run</filename>).</entry>
<entry morerows='1'>1</entry>
<entry morerows='1'>&gt; 0</entry>
</row>
<row>
<entry><literal>linked-runtime</literal></entry>
@ -1145,7 +1145,7 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
<row>
<entry><literal>masked</literal></entry>
<entry morerows='1'>Disabled entirely (permanently or just in <filename>/run</filename>).</entry>
<entry morerows='1'>1</entry>
<entry morerows='1'>&gt; 0</entry>
</row>
<row>
<entry><literal>masked-runtime</literal></entry>
@ -1163,7 +1163,7 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
<row>
<entry><literal>disabled</literal></entry>
<entry>Unit file is not enabled.</entry>
<entry>1</entry>
<entry>&gt; 0</entry>
</row>
</tbody>
</tgroup>
@ -1474,22 +1474,25 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
<listitem>
<para>Checks whether the system is operational. This
returns success when the system is fully up and running,
meaning not in startup, shutdown or maintenance
mode. Failure is returned otherwise. In addition, the
returns success (exit code 0) when the system is fully up
and running, specifically not in startup, shutdown or
maintenance mode, and with no failed services. Failure is
returned otherwise (exit code non-zero). In addition, the
current state is printed in a short string to standard
output, see table below. Use <option>--quiet</option> to
suppress this output.</para>
<table>
<title>Manager Operational States</title>
<tgroup cols='2'>
<colspec colname='name' />
<colspec colname='description' />
<title><command>is-system-running</command> output</title>
<tgroup cols='3'>
<colspec colname='name'/>
<colspec colname='description'/>
<colspec colname='exit-code'/>
<thead>
<row>
<entry>Name</entry>
<entry>Description</entry>
<entry>Exit Code</entry>
</row>
</thead>
<tbody>
@ -1499,32 +1502,53 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
<filename>basic.target</filename> is reached
or the <varname>maintenance</varname> state entered.
</para></entry>
<entry>&gt; 0</entry>
</row>
<row>
<entry><varname>starting</varname></entry>
<entry><para>Late bootup, before the job queue
becomes idle for the first time, or one of the
rescue targets are reached.</para></entry>
<entry>&gt; 0</entry>
</row>
<row>
<entry><varname>running</varname></entry>
<entry><para>The system is fully
operational.</para></entry>
<entry>0</entry>
</row>
<row>
<entry><varname>degraded</varname></entry>
<entry><para>The system is operational but one or more
units failed.</para></entry>
<entry>&gt; 0</entry>
</row>
<row>
<entry><varname>maintenance</varname></entry>
<entry><para>The rescue or emergency target is
active.</para></entry>
<entry>&gt; 0</entry>
</row>
<row>
<entry><varname>stopping</varname></entry>
<entry><para>The manager is shutting
down.</para></entry>
<entry>&gt; 0</entry>
</row>
<row>
<entry><varname>offline</varname></entry>
<entry><para>The manager is not
running. Specifically, this is the operational
state if an incompatible program is running as
system manager (PID 1).</para></entry>
<entry>&gt; 0</entry>
</row>
<row>
<entry><varname>unknown</varname></entry>
<entry><para>The operational state could not be
determined, due to lack of resources or another
error cause.</para></entry>
<entry>&gt; 0</entry>
</row>
</tbody>
</tgroup>

View File

@ -124,7 +124,12 @@
systemd, non-zero otherwise. If this option is passed, no
message is sent. This option is hence unrelated to the other
options. For details about the semantics of this option, see
<citerefentry><refentrytitle>sd_booted</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para></listitem>
<citerefentry><refentrytitle>sd_booted</refentrytitle><manvolnum>3</manvolnum></citerefentry>. An
alternative way to check for this state is to call
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
with the <command>is-system-running</command> command. It will
return <literal>offline</literal> if the system was not booted
with systemd. </para></listitem>
</varlistentry>
<xi:include href="standard-options.xml" xpointer="help" />

View File

@ -5753,6 +5753,12 @@ static int is_system_running(sd_bus *bus, char **args) {
_cleanup_free_ char *state = NULL;
int r;
if (arg_transport == BUS_TRANSPORT_LOCAL && !sd_booted()) {
if (!arg_quiet)
puts("offline");
return EXIT_FAILURE;
}
r = sd_bus_get_property_string(
bus,
"org.freedesktop.systemd1",