summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2015-09-23 17:04:43 +0200
committerLennart Poettering <lennart@poettering.net>2015-09-29 21:55:51 +0200
commit94f099d8132da7987a5dbe930dadf31aaded9a11 (patch)
tree55ac5bf23000aa149f905f0614398ea2a0eb84a6
parent16f98462a0bfd10862e73582a8ad70288d39132f (diff)
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...
-rw-r--r--man/systemctl.xml50
-rw-r--r--man/systemd-notify.xml7
-rw-r--r--src/systemctl/systemctl.c6
3 files changed, 49 insertions, 14 deletions
diff --git a/man/systemctl.xml b/man/systemctl.xml
index c1359d1678..9e9ba5a5b6 100644
--- a/man/systemctl.xml
+++ b/man/systemctl.xml
@@ -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>
diff --git a/man/systemd-notify.xml b/man/systemd-notify.xml
index 06d5ae5319..5832cc6759 100644
--- a/man/systemd-notify.xml
+++ b/man/systemd-notify.xml
@@ -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" />
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 56c7982b8f..2b9de5d016 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -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",