From 94f099d8132da7987a5dbe930dadf31aaded9a11 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 23 Sep 2015 17:04:43 +0200 Subject: [PATCH] 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... --- man/systemctl.xml | 50 +++++++++++++++++++++++++++++---------- man/systemd-notify.xml | 7 +++++- src/systemctl/systemctl.c | 6 +++++ 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 - Printed string - Meaning - Return value + Name + Description + Exit Code @@ -1137,7 +1137,7 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service linked Made available through a symlink to the unit file (permanently or just in /run). - 1 + > 0 linked-runtime @@ -1145,7 +1145,7 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service masked Disabled entirely (permanently or just in /run). - 1 + > 0 masked-runtime @@ -1163,7 +1163,7 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service disabled Unit file is not enabled. - 1 + > 0 @@ -1474,22 +1474,25 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service 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 to suppress this output. - Manager Operational States - - - + <command>is-system-running</command> output + + + + Name Description + Exit Code @@ -1499,32 +1502,53 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service basic.target is reached or the maintenance state entered. + > 0 starting Late bootup, before the job queue becomes idle for the first time, or one of the rescue targets are reached. + > 0 running The system is fully operational. + 0 degraded The system is operational but one or more units failed. + > 0 maintenance The rescue or emergency target is active. + > 0 stopping The manager is shutting down. + > 0 + + + offline + The manager is not + running. Specifically, this is the operational + state if an incompatible program is running as + system manager (PID 1). + > 0 + + + unknown + The operational state could not be + determined, due to lack of resources or another + error cause. + > 0 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 - sd_booted3. + sd_booted3. An + alternative way to check for this state is to call + systemctl1 + with the is-system-running command. It will + return offline if the system was not booted + with systemd. 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",