systemctl: make show/status honour --state and --type
This makes the interface more flexible, by allowing the same filtering for show and status as is done for list-units. Fixes #23207.
This commit is contained in:
committed by
Yu Watanabe
parent
c7a0c74c7f
commit
a6e334649d
+21
-25
@@ -188,13 +188,15 @@ Sun 2017-02-26 20:57:49 EST 2h 3min left Sun 2017-02-26 11:56:36 EST 6h ago
|
||||
<term><command>status</command> <optional><replaceable>PATTERN</replaceable>…|<replaceable>PID</replaceable>…]</optional></term>
|
||||
|
||||
<listitem>
|
||||
<para>Show terse runtime status information about one or
|
||||
more units, followed by most recent log data from the
|
||||
journal. If no units are specified, show system status. If
|
||||
combined with <option>--all</option>, also show the status of
|
||||
all units (subject to limitations specified with
|
||||
<option>-t</option>). If a PID is passed, show information
|
||||
about the unit the process belongs to.</para>
|
||||
<para>Show runtime status information about the whole system or about one or more units followed
|
||||
by most recent log data from the journal. If no positional arguments are specified, and no unit
|
||||
filter is given with <option>--type=</option>, <option>--state=</option>, or
|
||||
<option>--failed</option>, shows the status of the whole system. If combined with
|
||||
<option>--all</option>, follows that with the status of all units. If positional arguments are
|
||||
specified, each positional argument is treated as either a unit name to show, or a glob pattern
|
||||
to show units whose names match that pattern, or a PID to show the unit containing that PID. When
|
||||
<option>--type=</option>, <option>--state=</option>, or <option>--failed</option> are used, units
|
||||
are additionally filtered by the TYPE and ACTIVE state.</para>
|
||||
|
||||
<para>This function is intended to generate human-readable
|
||||
output. If you are looking for computer-parsable output,
|
||||
@@ -1621,18 +1623,13 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err
|
||||
<term><option>--type=</option></term>
|
||||
|
||||
<listitem>
|
||||
<para>The argument should be a comma-separated list of unit
|
||||
types such as <option>service</option> and
|
||||
<option>socket</option>.
|
||||
</para>
|
||||
<para>The argument is a comma-separated list of unit types such as <option>service</option> and
|
||||
<option>socket</option>. When units are listed with <command>list-units</command>,
|
||||
<command>show</command>, or <command>status</command>, only units of the specified types will be
|
||||
shown. By default, units of all types are shown.</para>
|
||||
|
||||
<para>If one of the arguments is a unit type, when listing
|
||||
units, limit display to certain unit types. Otherwise, units
|
||||
of all types will be shown.</para>
|
||||
|
||||
<para>As a special case, if one of the arguments is
|
||||
<option>help</option>, a list of allowed values will be
|
||||
printed and the program will exit.</para>
|
||||
<para>As a special case, if one of the arguments is <option>help</option>, a list of allowed values
|
||||
will be printed and the program will exit.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
@@ -1640,14 +1637,13 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err
|
||||
<term><option>--state=</option></term>
|
||||
|
||||
<listitem>
|
||||
<para>The argument should be a comma-separated list of unit
|
||||
LOAD, SUB, or ACTIVE states. When listing units, show only
|
||||
those in the specified states. Use <option>--state=failed</option>
|
||||
to show only failed units.</para>
|
||||
<para>The argument is a comma-separated list of unit LOAD, SUB, or ACTIVE states. When listing
|
||||
units with <command>list-units</command>, <command>show</command>, or <command>status</command>,
|
||||
show only those in the specified states. Use <option>--state=failed</option> or
|
||||
<option>--failed</option> to show only failed units.</para>
|
||||
|
||||
<para>As a special case, if one of the arguments is
|
||||
<option>help</option>, a list of allowed values will be
|
||||
printed and the program will exit.</para>
|
||||
<para>As a special case, if one of the arguments is <option>help</option>, a list of allowed values
|
||||
will be printed and the program will exit.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
|
||||
@@ -2070,6 +2070,7 @@ static int get_unit_dbus_path_by_pid(
|
||||
|
||||
static int show_all(
|
||||
sd_bus *bus,
|
||||
SystemctlShowMode show_mode,
|
||||
bool *new_line,
|
||||
bool *ellipsized) {
|
||||
|
||||
@@ -2095,7 +2096,7 @@ static int show_all(
|
||||
if (!p)
|
||||
return log_oom();
|
||||
|
||||
r = show_one(bus, p, u->id, SYSTEMCTL_SHOW_STATUS, new_line, ellipsized);
|
||||
r = show_one(bus, p, u->id, show_mode, new_line, ellipsized);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (r > 0 && ret == 0)
|
||||
@@ -2196,17 +2197,28 @@ int verb_show(int argc, char *argv[], void *userdata) {
|
||||
|
||||
pager_open(arg_pager_flags);
|
||||
|
||||
/* If no argument is specified inspect the manager itself */
|
||||
if (show_mode == SYSTEMCTL_SHOW_PROPERTIES && argc <= 1)
|
||||
return show_one(bus, "/org/freedesktop/systemd1", NULL, show_mode, &new_line, &ellipsized);
|
||||
if (argc <= 1) {
|
||||
/* If no argument or filter is specified inspect the manager itself:
|
||||
* systemctl status → we show status of the manager
|
||||
* systemctl status --all → status of the manager + status of all units
|
||||
* systemctl status --state=… → status of units in listed states
|
||||
* systemctl status --type=… → status of units of listed types
|
||||
* systemctl status --failed → status of failed units, mirroring systemctl list-units --failed
|
||||
*/
|
||||
|
||||
if (show_mode == SYSTEMCTL_SHOW_STATUS && argc <= 1) {
|
||||
if (!arg_states && !arg_types) {
|
||||
if (show_mode == SYSTEMCTL_SHOW_PROPERTIES)
|
||||
r = show_one(bus, "/org/freedesktop/systemd1", NULL, show_mode, &new_line, &ellipsized);
|
||||
else
|
||||
r = show_system_status(bus);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
show_system_status(bus);
|
||||
new_line = true;
|
||||
new_line = true;
|
||||
}
|
||||
|
||||
if (arg_all)
|
||||
ret = show_all(bus, &new_line, &ellipsized);
|
||||
if (arg_all || arg_states || arg_types)
|
||||
ret = show_all(bus, show_mode, &new_line, &ellipsized);
|
||||
} else {
|
||||
_cleanup_free_ char **patterns = NULL;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user