From 99813a19122932da2cf55fecaf06446dcf7989a2 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 25 Jun 2014 12:31:03 +0200 Subject: [PATCH] systemctl: add new "is-system-running" command to check whether system is fully up https://bugs.freedesktop.org/show_bug.cgi?id=66926 --- man/systemctl.xml | 17 +++++++++++++++++ src/systemctl/systemctl.c | 26 ++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/man/systemctl.xml b/man/systemctl.xml index b388eb312..598d31323 100644 --- a/man/systemctl.xml +++ b/man/systemctl.xml @@ -288,6 +288,8 @@ along with systemd; If not, see . snapshot, is-active, is-failed, + is-enabled, + is-system-running, enable and disable. @@ -1299,6 +1301,20 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service System Commands + + is-system-running + + + Checks whether the system is running. This returns + success when the system is fully up and running, meaning + not in startup, shutdown or maintainance mode. Failure is + returned otherwise. In addition, the current state is + printed in a short string to standard output. Use + to suppress output of this state + string. + + + default @@ -1307,6 +1323,7 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service isolate default.target. + rescue diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index 727be58d0..03720f411 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -5462,6 +5462,30 @@ static int unit_is_enabled(sd_bus *bus, char **args) { return !enabled; } +static int is_system_running(sd_bus *bus, char **args) { + _cleanup_free_ char *state = NULL; + int r; + + r = sd_bus_get_property_string( + bus, + "org.freedesktop.systemd1", + "/org/freedesktop/systemd1", + "org.freedesktop.systemd1.Manager", + "SystemState", + NULL, + &state); + if (r < 0) { + if (!arg_quiet) + puts("unknown"); + return 0; + } + + if (!arg_quiet) + puts(state); + + return streq(state, "running") ? EXIT_SUCCESS : EXIT_FAILURE; +} + static int systemctl_help(void) { pager_open_if_enabled(); @@ -5573,6 +5597,7 @@ static int systemctl_help(void) { " daemon-reload Reload systemd manager configuration\n" " daemon-reexec Reexecute systemd manager\n\n" "System Commands:\n" + " is-system-running Check whether system is fully running\n" " default Enter system default mode\n" " rescue Enter system rescue mode\n" " emergency Enter system emergency mode\n" @@ -6576,6 +6601,7 @@ static int systemctl_main(sd_bus *bus, int argc, char *argv[], int bus_error) { { "set-default", EQUAL, 2, set_default, NOBUS }, { "get-default", EQUAL, 1, get_default, NOBUS }, { "set-property", MORE, 3, set_property }, + { "is-system-running", EQUAL, 1, is_system_running }, {} }, *verb = verbs; -- 2.30.2