ask_password_agent_open();
}
-#ifdef HAVE_LOGIND
static void polkit_agent_open_if_enabled(void) {
/* Open the polkit agent as a child process if necessary */
polkit_agent_open();
}
-#endif
+
+static OutputFlags get_output_flags(void) {
+ return
+ arg_all * OUTPUT_SHOW_ALL |
+ arg_full * OUTPUT_FULL_WIDTH |
+ (!on_tty() || pager_have()) * OUTPUT_FULL_WIDTH |
+ on_tty() * OUTPUT_COLOR |
+ !arg_quiet * OUTPUT_WARN_CUTOFF;
+}
static int translate_bus_error_to_exit_status(int r, const sd_bus_error *error) {
assert(error);
n_shown++;
- if (STR_IN_SET(u->load_state, "error", "not-found", "masked")) {
+ if (STR_IN_SET(u->load_state, "error", "not-found", "masked") && !arg_plain) {
on_loaded = ansi_highlight_red();
on_circle = ansi_highlight_yellow();
off_loaded = off_circle = ansi_highlight_off();
circle = true;
- }
-
- if (streq(u->active_state, "failed")) {
+ } else if (streq(u->active_state, "failed") && !arg_plain) {
on_circle = on_active = ansi_highlight_red();
off_circle = off_active = ansi_highlight_off();
circle = true;
_cleanup_bus_close_unref_ sd_bus *container = NULL;
int k;
- r = sd_bus_open_system_container(&container, *i);
+ r = sd_bus_open_system_machine(&container, *i);
if (r < 0) {
log_error_errno(r, "Failed to connect to container %s: %m", *i);
continue;
qsort_safe(deps, strv_length(deps), sizeof (char*), list_dependencies_compare);
STRV_FOREACH(c, deps) {
- int state;
-
if (strv_contains(*units, *c)) {
if (!arg_plain) {
r = list_dependencies_print("...", level + 1, (branches << 1) | (c[1] == NULL ? 0 : 1), 1);
continue;
}
- state = check_one_unit(bus, *c, "activating\0active\0reloading\0", true);
- if (state > 0)
- printf("%s%s%s ", ansi_highlight_green(), draw_special_char(DRAW_BLACK_CIRCLE), ansi_highlight_off());
- else
- printf("%s%s%s ", ansi_highlight_red(), draw_special_char(DRAW_BLACK_CIRCLE), ansi_highlight_off());
+ if (arg_plain)
+ printf(" ");
+ else {
+ int state;
+ const char *on;
+
+ state = check_one_unit(bus, *c, "activating\0active\0reloading\0", true);
+ on = state > 0 ? ansi_highlight_green() : ansi_highlight_red();
+ printf("%s%s%s ", on, draw_special_char(DRAW_BLACK_CIRCLE), ansi_highlight_off());
+ }
r = list_dependencies_print(*c, level, branches, c[1] == NULL);
if (r < 0)
assert(mi);
if (!bus) {
- r = sd_bus_open_system_container(&container, mi->name);
+ r = sd_bus_open_system_machine(&container, mi->name);
if (r < 0)
return r;
failedlen = MAX(failedlen, DECIMAL_STR_WIDTH(m->n_failed_units));
jobslen = MAX(jobslen, DECIMAL_STR_WIDTH(m->n_jobs));
- if (!arg_no_legend && !streq_ptr(m->state, "running"))
+ if (!arg_plain && !streq_ptr(m->state, "running"))
circle_len = 2;
}
}
}
-static int deserialize_and_dump_unit_file_changes(sd_bus_message *m) {
- const char *type, *path, *source;
- int r;
-
- r = sd_bus_message_enter_container(m, SD_BUS_TYPE_ARRAY, "(sss)");
- if (r < 0)
- return bus_log_parse_error(r);
-
- while ((r = sd_bus_message_read(m, "(sss)", &type, &path, &source)) > 0) {
- if (!arg_quiet) {
- if (streq(type, "symlink"))
- log_info("Created symlink from %s to %s.", path, source);
- else
- log_info("Removed symlink %s.", path);
- }
- }
- if (r < 0)
- return bus_log_parse_error(r);
-
- r = sd_bus_message_exit_container(m);
- if (r < 0)
- return bus_log_parse_error(r);
-
- return 0;
-}
-
static int set_default(sd_bus *bus, char **args) {
_cleanup_free_ char *unit = NULL;
UnitFileChange *changes = NULL;
return r;
}
- r = deserialize_and_dump_unit_file_changes(reply);
+ r = bus_deserialize_and_dump_unit_file_changes(reply, arg_quiet);
if (r < 0)
return r;
assert(n == 0 || jobs);
if (n == 0) {
- on = ansi_highlight_green();
- off = ansi_highlight_off();
+ if (!arg_no_legend) {
+ on = ansi_highlight_green();
+ off = ansi_highlight_off();
- printf("%sNo jobs %s.%s\n", on, skipped ? "listed" : "running", off);
+ printf("%sNo jobs %s.%s\n", on, skipped ? "listed" : "running", off);
+ }
return;
}
return r;
}
-typedef struct WaitData {
- Set *set;
-
- char *name;
- char *result;
-} WaitData;
-
-static int wait_filter(sd_bus *bus, sd_bus_message *m, void *data, sd_bus_error *error) {
- WaitData *d = data;
-
- assert(bus);
- assert(m);
- assert(d);
-
- log_debug("Got D-Bus request: %s.%s() on %s",
- sd_bus_message_get_interface(m),
- sd_bus_message_get_member(m),
- sd_bus_message_get_path(m));
-
- if (sd_bus_message_is_signal(m, "org.freedesktop.DBus.Local", "Disconnected")) {
- log_error("Warning! D-Bus connection terminated.");
- sd_bus_close(bus);
- } else if (sd_bus_message_is_signal(m, "org.freedesktop.systemd1.Manager", "JobRemoved")) {
- uint32_t id;
- const char *path, *result, *unit;
- char *ret;
- int r;
-
- r = sd_bus_message_read(m, "uoss", &id, &path, &unit, &result);
- if (r >= 0) {
- ret = set_remove(d->set, (char*) path);
- if (!ret)
- return 0;
-
- free(ret);
-
- if (!isempty(result))
- d->result = strdup(result);
-
- if (!isempty(unit))
- d->name = strdup(unit);
-
- return 0;
- }
-#ifndef NOLEGACY
- r = sd_bus_message_read(m, "uos", &id, &path, &result);
- if (r >= 0) {
- ret = set_remove(d->set, (char*) path);
- if (!ret)
- return 0;
-
- free(ret);
-
- if (*result)
- d->result = strdup(result);
-
- return 0;
- }
-#endif
-
- bus_log_parse_error(r);
- }
-
- return 0;
-}
-
-static int enable_wait_for_jobs(sd_bus *bus) {
- int r;
-
- assert(bus);
-
- r = sd_bus_add_match(
- bus,
- NULL,
- "type='signal',"
- "sender='org.freedesktop.systemd1',"
- "interface='org.freedesktop.systemd1.Manager',"
- "member='JobRemoved',"
- "path='/org/freedesktop/systemd1'",
- NULL, NULL);
- if (r < 0) {
- log_error("Failed to add match");
- return -EIO;
- }
-
- /* This is slightly dirty, since we don't undo the match registrations. */
- return 0;
-}
-
-static int bus_process_wait(sd_bus *bus) {
- int r;
-
- for (;;) {
- r = sd_bus_process(bus, NULL);
- if (r < 0)
- return r;
- if (r > 0)
- return 0;
- r = sd_bus_wait(bus, (uint64_t) -1);
- if (r < 0)
- return r;
- }
-}
-
-static int check_wait_response(WaitData *d) {
- int r = 0;
-
- assert(d->result);
-
- if (!arg_quiet) {
- if (streq(d->result, "canceled"))
- log_error("Job for %s canceled.", strna(d->name));
- else if (streq(d->result, "timeout"))
- log_error("Job for %s timed out.", strna(d->name));
- else if (streq(d->result, "dependency"))
- log_error("A dependency job for %s failed. See 'journalctl -xe' for details.", strna(d->name));
- else if (streq(d->result, "invalid"))
- log_error("Job for %s invalid.", strna(d->name));
- else if (streq(d->result, "assert"))
- log_error("Assertion failed on job for %s.", strna(d->name));
- else if (streq(d->result, "unsupported"))
- log_error("Operation on or unit type of %s not supported on this system.", strna(d->name));
- else if (!streq(d->result, "done") && !streq(d->result, "skipped")) {
- if (d->name) {
- bool quotes;
-
- quotes = chars_intersect(d->name, SHELL_NEED_QUOTES);
-
- log_error("Job for %s failed. See \"systemctl status %s%s%s\" and \"journalctl -xe\" for details.",
- d->name,
- quotes ? "'" : "", d->name, quotes ? "'" : "");
- } else
- log_error("Job failed. See \"journalctl -xe\" for details.");
- }
- }
-
- if (streq(d->result, "canceled"))
- r = -ECANCELED;
- else if (streq(d->result, "timeout"))
- r = -ETIME;
- else if (streq(d->result, "dependency"))
- r = -EIO;
- else if (streq(d->result, "invalid"))
- r = -ENOEXEC;
- else if (streq(d->result, "assert"))
- r = -EPROTO;
- else if (streq(d->result, "unsupported"))
- r = -ENOTSUP;
- else if (!streq(d->result, "done") && !streq(d->result, "skipped"))
- r = -EIO;
-
- return r;
-}
-
-static int wait_for_jobs(sd_bus *bus, Set *s) {
- _cleanup_bus_slot_unref_ sd_bus_slot *slot = NULL;
- WaitData d = { .set = s };
- int r = 0, q;
-
- assert(bus);
- assert(s);
-
- q = sd_bus_add_filter(bus, &slot, wait_filter, &d);
- if (q < 0)
- return log_oom();
-
- while (!set_isempty(s)) {
- q = bus_process_wait(bus);
- if (q < 0)
- return log_error_errno(q, "Failed to wait for response: %m");
-
- if (d.result) {
- q = check_wait_response(&d);
- /* Return the first error as it is most likely to be
- * meaningful. */
- if (q < 0 && r == 0)
- r = q;
- log_debug("Got result %s/%s for job %s",
- strna(d.result), strerror(-q), strna(d.name));
- }
-
- free(d.name);
- d.name = NULL;
-
- free(d.result);
- d.result = NULL;
- }
-
- return r;
-}
-
static int check_one_unit(sd_bus *bus, const char *name, const char *good_states, bool quiet) {
_cleanup_bus_message_unref_ sd_bus_message *reply = NULL;
_cleanup_free_ char *n = NULL, *state = NULL;
const char *name,
const char *mode,
sd_bus_error *error,
- Set *s) {
+ BusWaitForJobs *w) {
_cleanup_bus_message_unref_ sd_bus_message *m = NULL, *reply = NULL;
const char *path;
if (need_daemon_reload(bus, name) > 0)
warn_unit_file_changed(name);
- if (s) {
- char *p;
-
- p = strdup(path);
- if (!p)
- return log_oom();
-
- log_debug("Adding %s to the set", p);
- r = set_consume(s, p);
+ if (w) {
+ log_debug("Adding %s to the set", path);
+ r = bus_wait_for_jobs_add(w, path);
if (r < 0)
return log_oom();
}
}
static int start_unit(sd_bus *bus, char **args) {
- _cleanup_set_free_free_ Set *s = NULL;
- _cleanup_strv_free_ char **names = NULL;
+ _cleanup_(bus_wait_for_jobs_freep) BusWaitForJobs *w = NULL;
const char *method, *mode, *one_name, *suffix = NULL;
+ _cleanup_strv_free_ char **names = NULL;
char **name;
int r = 0;
assert(bus);
ask_password_agent_open_if_enabled();
+ polkit_agent_open_if_enabled();
if (arg_action == ACTION_SYSTEMCTL) {
enum action action;
}
if (!arg_no_block) {
- r = enable_wait_for_jobs(bus);
+ r = bus_wait_for_jobs_new(bus, &w);
if (r < 0)
return log_error_errno(r, "Could not watch jobs: %m");
-
- s = set_new(&string_hash_ops);
- if (!s)
- return log_oom();
}
STRV_FOREACH(name, names) {
_cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
int q;
- q = start_unit_one(bus, method, *name, mode, &error, s);
+ q = start_unit_one(bus, method, *name, mode, &error, w);
if (r >= 0 && q < 0)
r = translate_bus_error_to_exit_status(q, &error);
}
if (!arg_no_block) {
int q;
- q = wait_for_jobs(bus, s);
+ q = bus_wait_for_jobs(w, arg_quiet);
if (q < 0)
return q;
return -EPERM;
}
+ if (a == ACTION_REBOOT) {
+ r = update_reboot_param_file(args[1]);
+ if (r < 0)
+ return r;
+ }
+
if (arg_force >= 2 &&
(a == ACTION_HALT ||
a == ACTION_POWEROFF ||
a == ACTION_HIBERNATE ||
a == ACTION_HYBRID_SLEEP)) {
r = reboot_with_logind(bus, a);
- if (r >= 0)
+ if (r >= 0 || IN_SET(r, -ENOTSUP, -EINPROGRESS))
return r;
}
assert(bus);
assert(args);
+ polkit_agent_open_if_enabled();
+
if (!arg_kill_who)
arg_kill_who = "all";
/* Swap */
const char *what;
+ /* CGroup */
+ uint64_t memory_current;
+ uint64_t memory_limit;
+
LIST_HEAD(ExecStatusInfo, exec);
} UnitStatusInfo;
char since1[FORMAT_TIMESTAMP_RELATIVE_MAX], *s1;
char since2[FORMAT_TIMESTAMP_MAX], *s2;
const char *path;
- int flags =
- arg_all * OUTPUT_SHOW_ALL |
- (!on_tty() || pager_have()) * OUTPUT_FULL_WIDTH |
- on_tty() * OUTPUT_COLOR |
- !arg_quiet * OUTPUT_WARN_CUTOFF |
- arg_full * OUTPUT_FULL_WIDTH;
char **t, **t2;
assert(i);
continue;
argv = strv_join(p->argv, " ");
- printf(" Process: %u %s=%s ", p->pid, p->name, strna(argv));
+ printf(" Process: "PID_FMT" %s=%s ", p->pid, p->name, strna(argv));
good = is_clean_exit_lsb(p->code, p->status, NULL);
if (!good) {
if (i->status_errno > 0)
printf(" Error: %i (%s)\n", i->status_errno, strerror(i->status_errno));
+ if (i->memory_current != (uint64_t) -1) {
+ char buf[FORMAT_BYTES_MAX];
+
+ printf(" Memory: %s", format_bytes(buf, sizeof(buf), i->memory_current));
+
+ if (i->memory_limit != (uint64_t) -1)
+ printf(" (limit: %s)\n", format_bytes(buf, sizeof(buf), i->memory_limit));
+ else
+ printf("\n");
+ }
+
if (i->control_group &&
(i->main_pid > 0 || i->control_pid > 0 ||
- ((arg_transport != BUS_TRANSPORT_LOCAL && arg_transport != BUS_TRANSPORT_CONTAINER) || cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, i->control_group, false) == 0))) {
+ ((arg_transport != BUS_TRANSPORT_LOCAL && arg_transport != BUS_TRANSPORT_MACHINE) || cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, i->control_group, false) == 0))) {
unsigned c;
printf(" CGroup: %s\n", i->control_group);
- if (arg_transport == BUS_TRANSPORT_LOCAL || arg_transport == BUS_TRANSPORT_CONTAINER) {
+ if (arg_transport == BUS_TRANSPORT_LOCAL || arg_transport == BUS_TRANSPORT_MACHINE) {
unsigned k = 0;
pid_t extra[2];
static const char prefix[] = " ";
if (i->control_pid > 0)
extra[k++] = i->control_pid;
- show_cgroup_and_extra(SYSTEMD_CGROUP_CONTROLLER, i->control_group, prefix, c, false, extra, k, flags);
+ show_cgroup_and_extra(SYSTEMD_CGROUP_CONTROLLER, i->control_group, prefix, c, false, extra, k, get_output_flags());
}
}
if (i->id && arg_transport == BUS_TRANSPORT_LOCAL) {
- show_journal_by_unit(stdout,
- i->id,
- arg_output,
- 0,
- i->inactive_exit_timestamp_monotonic,
- arg_lines,
- getuid(),
- flags | OUTPUT_BEGIN_NEWLINE,
- arg_scope == UNIT_FILE_SYSTEM,
- ellipsized);
+ show_journal_by_unit(
+ stdout,
+ i->id,
+ arg_output,
+ 0,
+ i->inactive_exit_timestamp_monotonic,
+ arg_lines,
+ getuid(),
+ get_output_flags() | OUTPUT_BEGIN_NEWLINE,
+ SD_JOURNAL_LOCAL_ONLY,
+ arg_scope == UNIT_FILE_SYSTEM,
+ ellipsized);
}
if (i->need_daemon_reload)
i->condition_timestamp = (usec_t) u;
else if (streq(name, "AssertTimestamp"))
i->assert_timestamp = (usec_t) u;
+ else if (streq(name, "MemoryCurrent"))
+ i->memory_current = u;
+ else if (streq(name, "MemoryLimit"))
+ i->memory_limit = u;
break;
}
_cleanup_bus_message_unref_ sd_bus_message *reply = NULL;
_cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
- UnitStatusInfo info = {};
+ UnitStatusInfo info = {
+ .memory_current = (uint64_t) -1,
+ .memory_limit = (uint64_t) -1,
+ };
ExecStatusInfo *p;
int r;
&reply,
"u", pid);
if (r < 0) {
- log_error("Failed to get unit for PID "PID_FMT": %s", pid, bus_error_message(&error, r));
+ log_error("Failed to get unit for PID %"PRIu32": %s", pid, bus_error_message(&error, r));
return r;
}
format_timestamp_relative(since1, sizeof(since1), mi.timestamp));
printf(" CGroup: %s\n", mi.control_group ?: "/");
- if (arg_transport == BUS_TRANSPORT_LOCAL || arg_transport == BUS_TRANSPORT_CONTAINER) {
- int flags =
- arg_all * OUTPUT_SHOW_ALL |
- (!on_tty() || pager_have()) * OUTPUT_FULL_WIDTH |
- on_tty() * OUTPUT_COLOR |
- !arg_quiet * OUTPUT_WARN_CUTOFF |
- arg_full * OUTPUT_FULL_WIDTH;
-
+ if (arg_transport == BUS_TRANSPORT_LOCAL || arg_transport == BUS_TRANSPORT_MACHINE) {
static const char prefix[] = " ";
unsigned c;
else
c = 0;
- show_cgroup(SYSTEMD_CGROUP_CONTROLLER, strempty(mi.control_group), prefix, c, false, flags);
+ show_cgroup(SYSTEMD_CGROUP_CONTROLLER, strempty(mi.control_group), prefix, c, false, get_output_flags());
}
free(mi.state);
return log_error_errno(ENOTDIR, "Cannot find units: $XDG_RUNTIME_DIR is not set.");
}
- r = lookup_paths_init(lp,
- arg_scope == UNIT_FILE_SYSTEM ? SYSTEMD_SYSTEM : SYSTEMD_USER,
- arg_scope == UNIT_FILE_USER,
- arg_root,
- NULL, NULL, NULL);
+ r = lookup_paths_init_from_scope(lp, arg_scope, arg_root);
if (r < 0)
return log_error_errno(r, "Failed to lookup unit lookup paths: %m");
assert(args);
+ if (arg_host) {
+ log_error("Option --host cannot be used with 'cat'");
+ return -EINVAL;
+ }
+
r = init_home_and_lookup_paths(&user_home, &user_runtime, &lp);
if (r < 0)
return r;
char **i;
int r;
+ polkit_agent_open_if_enabled();
+
r = sd_bus_message_new_method_call(
bus,
&m,
const char *path;
int r;
+ polkit_agent_open_if_enabled();
+
if (strv_length(args) > 1)
n = unit_name_mangle_with_suffix(args[1], MANGLE_NOGLOB, ".snapshot");
else
assert(args);
+ polkit_agent_open_if_enabled();
+
r = expand_names(bus, args + 1, ".snapshot", &names);
if (r < 0)
log_error_errno(r, "Failed to expand names: %m");
const char *method;
int r;
+ polkit_agent_open_if_enabled();
+
if (arg_action == ACTION_RELOAD)
method = "Reload";
else if (arg_action == ACTION_REEXEC)
if (strv_length(args) <= 1)
return daemon_reload(bus, args);
+ polkit_agent_open_if_enabled();
+
r = expand_names(bus, args + 1, NULL, &names);
if (r < 0)
log_error_errno(r, "Failed to expand names: %m");
return -EPROTO;
/* Remove this entry, so that we don't try enabling it as native unit */
- assert(f > 0 && streq(args[f-1], name));
- assert_se(strv_remove(args + f - 1, name));
+ assert(f > 0);
+ f--;
+ assert(args[f] == name);
+ strv_remove(args, name);
}
#endif
bool send_force = true, send_preset_mode = false;
const char *method;
+ polkit_agent_open_if_enabled();
+
if (streq(verb, "enable")) {
method = "EnableUnitFiles";
expect_carries_install_info = true;
return bus_log_parse_error(r);
}
- r = deserialize_and_dump_unit_file_changes(reply);
+ r = bus_deserialize_and_dump_unit_file_changes(reply, arg_quiet);
if (r < 0)
return r;
_cleanup_bus_message_unref_ sd_bus_message *reply = NULL, *m = NULL;
_cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
+ polkit_agent_open_if_enabled();
+
r = sd_bus_message_new_method_call(
bus,
&m,
return r;
}
- r = deserialize_and_dump_unit_file_changes(reply);
+ r = bus_deserialize_and_dump_unit_file_changes(reply, arg_quiet);
if (r < 0)
return r;
_cleanup_bus_message_unref_ sd_bus_message *m = NULL, *reply = NULL;
_cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
+ polkit_agent_open_if_enabled();
+
r = sd_bus_message_new_method_call(
bus,
&m,
return r;
}
- r = deserialize_and_dump_unit_file_changes(reply);
+ r = bus_deserialize_and_dump_unit_file_changes(reply, arg_quiet);
if (r < 0)
return r;
return r;
}
- r = copy_file(original_path, t, 0, 0644);
+ r = copy_file(original_path, t, 0, 0644, 0);
if (r == -ENOENT) {
r = touch(t);
if (r < 0) {
" Operate on remote host\n"
" -M --machine=CONTAINER\n"
" Operate on local container\n"
- " -t --type=TYPE List only units of a particular type\n"
- " --state=STATE List only units with particular LOAD or SUB or ACTIVE state\n"
+ " -t --type=TYPE List units of a particular type\n"
+ " --state=STATE List units with particular LOAD or SUB or ACTIVE state\n"
" -p --property=NAME Show only properties by this name\n"
" -a --all Show all loaded units/properties, including dead/empty\n"
" ones. To list all units installed on the system, use\n"
" -q --quiet Suppress output\n"
" --no-block Do not wait until operation finished\n"
" --no-wall Don't send wall message before halt/power-off/reboot\n"
- " --no-reload When enabling/disabling unit files, don't reload daemon\n"
- " configuration\n"
+ " --no-reload Don't reload daemon after en-/dis-abling unit files\n"
" --no-legend Do not print a legend (column headers and hints)\n"
" --no-pager Do not pipe output into a pager\n"
" --no-ask-password\n"
" --runtime Enable unit files only temporarily until next reboot\n"
" -f --force When enabling unit files, override existing symlinks\n"
" When shutting down, execute action immediately\n"
- " --preset-mode= Specifies whether fully apply presets, or only enable,\n"
- " or only disable\n"
+ " --preset-mode= Apply only enable, only disable, or all presets\n"
" --root=PATH Enable unit files in the specified root directory\n"
" -n --lines=INTEGER Number of journal entries to show\n"
- " -o --output=STRING Change journal output mode (short, short-monotonic,\n"
- " verbose, export, json, json-pretty, json-sse, cat)\n"
+ " -o --output=STRING Change journal output mode (short, short-iso,\n"
+ " short-precise, short-monotonic, verbose,\n"
+ " export, json, json-pretty, json-sse, cat)\n"
" --plain Print unit dependencies as a list instead of a tree\n\n"
"Unit Commands:\n"
" list-units [PATTERN...] List loaded units\n"
" based on preset configuration\n"
" preset-all Enable/disable all unit files based on\n"
" preset configuration\n"
- " is-enabled NAME... Check whether unit files are enabled\n\n"
+ " is-enabled NAME... Check whether unit files are enabled\n"
" mask NAME... Mask one or more units\n"
" unmask NAME... Unmask one or more units\n"
" link PATH... Link one or more units files into\n"
" on specified one or more units\n"
" add-requires TARGET NAME... Add 'Requires' dependency for the target\n"
" on specified one or more units\n"
- " get-default Get the name of the default target\n"
- " set-default NAME Set the default target\n"
" edit NAME... Edit one or more unit files\n"
- "\n"
+ " get-default Get the name of the default target\n"
+ " set-default NAME Set the default target\n\n"
"Machine Commands:\n"
" list-machines [PATTERN...] List local containers and host\n\n"
"Job Commands:\n"
" show-environment Dump environment\n"
" set-environment NAME=VALUE... Set one or more environment variables\n"
" unset-environment NAME... Unset one or more environment variables\n"
- " import-environment NAME... Import all, one or more environment variables\n\n"
+ " import-environment [NAME...] Import all or some environment variables\n\n"
"Manager Lifecycle Commands:\n"
" daemon-reload Reload systemd manager configuration\n"
" daemon-reexec Reexecute systemd manager\n\n"
break;
case 'M':
- arg_transport = BUS_TRANSPORT_CONTAINER;
+ arg_transport = BUS_TRANSPORT_MACHINE;
arg_host = optarg;
break;
assert(argc >= 0);
assert(argv);
- while ((c = getopt_long(argc, argv, "HPrhkt:afFc", options, NULL)) >= 0)
+ while ((c = getopt_long(argc, argv, "HPrhkKt:afFc", options, NULL)) >= 0)
switch (c) {
case ARG_HELP:
case 't':
case 'a':
+ case 'f':
+ case 'F':
/* Compatibility nops */
break;
{ "import-environment", MORE, 1, import_environment},
{ "halt", EQUAL, 1, start_special, FORCE },
{ "poweroff", EQUAL, 1, start_special, FORCE },
- { "reboot", EQUAL, 1, start_special, FORCE },
+ { "reboot", MORE, 1, start_special, FORCE },
{ "kexec", EQUAL, 1, start_special },
{ "suspend", EQUAL, 1, start_special },
{ "hibernate", EQUAL, 1, start_special },
goto finish;
}
+ /* Increase max number of open files to 16K if we can, we
+ * might needs this when browsing journal files, which might
+ * be split up into many files. */
+ setrlimit_closest(RLIMIT_NOFILE, &RLIMIT_MAKE_CONST(16384));
+
if (!avoid_bus())
r = bus_open_transport_systemd(arg_transport, arg_host, arg_scope != UNIT_FILE_SYSTEM, &bus);