diff options
author | Lennart Poettering <lennart@poettering.net> | 2014-06-25 12:31:03 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2014-06-25 12:31:03 +0200 |
commit | 99813a19122932da2cf55fecaf06446dcf7989a2 (patch) | |
tree | 0bd560d08f1d33ca2e1bdf80e4cd1a90422f0e14 | |
parent | e8a152c62dd2003731a59e0dffef4336c63110b9 (diff) |
systemctl: add new "is-system-running" command to check whether system is fully up
https://bugs.freedesktop.org/show_bug.cgi?id=66926
-rw-r--r-- | man/systemctl.xml | 17 | ||||
-rw-r--r-- | src/systemctl/systemctl.c | 26 |
2 files changed, 43 insertions, 0 deletions
diff --git a/man/systemctl.xml b/man/systemctl.xml index b388eb312e..598d31323f 100644 --- a/man/systemctl.xml +++ b/man/systemctl.xml @@ -288,6 +288,8 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>. <command>snapshot</command>, <command>is-active</command>, <command>is-failed</command>, + <command>is-enabled</command>, + <command>is-system-running</command>, <command>enable</command> and <command>disable</command>.</para> </listitem> @@ -1300,6 +1302,20 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service <variablelist> <varlistentry> + <term><command>is-system-running</command></term> + + <listitem> + <para>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 + <option>--quiet</option> to suppress output of this state + string.</para> + </listitem> + </varlistentry> + + <varlistentry> <term><command>default</command></term> <listitem> @@ -1307,6 +1323,7 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service <command>isolate default.target</command>.</para> </listitem> </varlistentry> + <varlistentry> <term><command>rescue</command></term> diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index 727be58d0a..03720f411d 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; |