bus-util: print "systemctl --user" on user service manager
When a unit was started with "systemctl --user" and it failed, error messages is printed as "systemctl status". But it should be "systemctl --user status".
This commit is contained in:
parent
8ec46f55e5
commit
10ba483504
|
@ -1571,7 +1571,7 @@ static int start_machine(int argc, char *argv[], void *userdata) {
|
||||||
return log_oom();
|
return log_oom();
|
||||||
}
|
}
|
||||||
|
|
||||||
r = bus_wait_for_jobs(w, arg_quiet);
|
r = bus_wait_for_jobs(w, arg_quiet, NULL);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
|
|
@ -2041,13 +2041,21 @@ static const struct {
|
||||||
{ "start-limit", "start of the service was attempted too often" }
|
{ "start-limit", "start of the service was attempted too often" }
|
||||||
};
|
};
|
||||||
|
|
||||||
static void log_job_error_with_service_result(const char* service, const char *result) {
|
static void log_job_error_with_service_result(const char* service, const char *result, const char *extra_args) {
|
||||||
_cleanup_free_ char *service_shell_quoted = NULL;
|
_cleanup_free_ char *service_shell_quoted = NULL, *systemctl_extra_args = NULL;
|
||||||
|
|
||||||
assert(service);
|
assert(service);
|
||||||
|
|
||||||
service_shell_quoted = shell_maybe_quote(service);
|
service_shell_quoted = shell_maybe_quote(service);
|
||||||
|
|
||||||
|
systemctl_extra_args = strjoin("systemctl ", extra_args, " ", NULL);
|
||||||
|
if (!systemctl_extra_args) {
|
||||||
|
log_oom();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
systemctl_extra_args = strstrip(systemctl_extra_args);
|
||||||
|
|
||||||
if (!isempty(result)) {
|
if (!isempty(result)) {
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
|
@ -2056,27 +2064,30 @@ static void log_job_error_with_service_result(const char* service, const char *r
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (i < ELEMENTSOF(explanations)) {
|
if (i < ELEMENTSOF(explanations)) {
|
||||||
log_error("Job for %s failed because %s. See \"systemctl status %s\" and \"journalctl -xe\" for details.\n",
|
log_error("Job for %s failed because %s. See \"%s status %s\" and \"journalctl -xe\" for details.\n",
|
||||||
service,
|
service,
|
||||||
explanations[i].explanation,
|
explanations[i].explanation,
|
||||||
|
systemctl_extra_args,
|
||||||
strna(service_shell_quoted));
|
strna(service_shell_quoted));
|
||||||
|
|
||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log_error("Job for %s failed. See \"systemctl status %s\" and \"journalctl -xe\" for details.\n",
|
log_error("Job for %s failed. See \"%s status %s\" and \"journalctl -xe\" for details.\n",
|
||||||
service,
|
service,
|
||||||
|
systemctl_extra_args,
|
||||||
strna(service_shell_quoted));
|
strna(service_shell_quoted));
|
||||||
|
|
||||||
finish:
|
finish:
|
||||||
/* For some results maybe additional explanation is required */
|
/* For some results maybe additional explanation is required */
|
||||||
if (streq_ptr(result, "start-limit"))
|
if (streq_ptr(result, "start-limit"))
|
||||||
log_info("To force a start use \"systemctl reset-failed %1$s\" followed by \"systemctl start %1$s\" again.",
|
log_info("To force a start use \"%1$s reset-failed %2$s\" followed by \"%1$s start %2$s\" again.",
|
||||||
|
systemctl_extra_args,
|
||||||
strna(service_shell_quoted));
|
strna(service_shell_quoted));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int check_wait_response(BusWaitForJobs *d, bool quiet) {
|
static int check_wait_response(BusWaitForJobs *d, bool quiet, const char *extra_args) {
|
||||||
int r = 0;
|
int r = 0;
|
||||||
|
|
||||||
assert(d->result);
|
assert(d->result);
|
||||||
|
@ -2103,7 +2114,7 @@ static int check_wait_response(BusWaitForJobs *d, bool quiet) {
|
||||||
if (q < 0)
|
if (q < 0)
|
||||||
log_debug_errno(q, "Failed to get Result property of service %s: %m", d->name);
|
log_debug_errno(q, "Failed to get Result property of service %s: %m", d->name);
|
||||||
|
|
||||||
log_job_error_with_service_result(d->name, result);
|
log_job_error_with_service_result(d->name, result, extra_args);
|
||||||
} else
|
} else
|
||||||
log_error("Job failed. See \"journalctl -xe\" for details.");
|
log_error("Job failed. See \"journalctl -xe\" for details.");
|
||||||
}
|
}
|
||||||
|
@ -2127,7 +2138,7 @@ static int check_wait_response(BusWaitForJobs *d, bool quiet) {
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
int bus_wait_for_jobs(BusWaitForJobs *d, bool quiet) {
|
int bus_wait_for_jobs(BusWaitForJobs *d, bool quiet, const char *extra_args) {
|
||||||
int r = 0;
|
int r = 0;
|
||||||
|
|
||||||
assert(d);
|
assert(d);
|
||||||
|
@ -2140,7 +2151,7 @@ int bus_wait_for_jobs(BusWaitForJobs *d, bool quiet) {
|
||||||
return log_error_errno(q, "Failed to wait for response: %m");
|
return log_error_errno(q, "Failed to wait for response: %m");
|
||||||
|
|
||||||
if (d->result) {
|
if (d->result) {
|
||||||
q = check_wait_response(d, quiet);
|
q = check_wait_response(d, quiet, extra_args);
|
||||||
/* Return the first error as it is most likely to be
|
/* Return the first error as it is most likely to be
|
||||||
* meaningful. */
|
* meaningful. */
|
||||||
if (q < 0 && r == 0)
|
if (q < 0 && r == 0)
|
||||||
|
@ -2175,7 +2186,7 @@ int bus_wait_for_jobs_one(BusWaitForJobs *d, const char *path, bool quiet) {
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_oom();
|
return log_oom();
|
||||||
|
|
||||||
return bus_wait_for_jobs(d, quiet);
|
return bus_wait_for_jobs(d, quiet, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet, UnitFileChange **changes, unsigned *n_changes) {
|
int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet, UnitFileChange **changes, unsigned *n_changes) {
|
||||||
|
|
|
@ -182,7 +182,7 @@ typedef struct BusWaitForJobs BusWaitForJobs;
|
||||||
int bus_wait_for_jobs_new(sd_bus *bus, BusWaitForJobs **ret);
|
int bus_wait_for_jobs_new(sd_bus *bus, BusWaitForJobs **ret);
|
||||||
void bus_wait_for_jobs_free(BusWaitForJobs *d);
|
void bus_wait_for_jobs_free(BusWaitForJobs *d);
|
||||||
int bus_wait_for_jobs_add(BusWaitForJobs *d, const char *path);
|
int bus_wait_for_jobs_add(BusWaitForJobs *d, const char *path);
|
||||||
int bus_wait_for_jobs(BusWaitForJobs *d, bool quiet);
|
int bus_wait_for_jobs(BusWaitForJobs *d, bool quiet, const char *extra_args);
|
||||||
int bus_wait_for_jobs_one(BusWaitForJobs *d, const char *path, bool quiet);
|
int bus_wait_for_jobs_one(BusWaitForJobs *d, const char *path, bool quiet);
|
||||||
|
|
||||||
DEFINE_TRIVIAL_CLEANUP_FUNC(BusWaitForJobs*, bus_wait_for_jobs_free);
|
DEFINE_TRIVIAL_CLEANUP_FUNC(BusWaitForJobs*, bus_wait_for_jobs_free);
|
||||||
|
|
|
@ -2794,7 +2794,7 @@ static int start_unit(int argc, char *argv[], void *userdata) {
|
||||||
if (!arg_no_block) {
|
if (!arg_no_block) {
|
||||||
int q;
|
int q;
|
||||||
|
|
||||||
q = bus_wait_for_jobs(w, arg_quiet);
|
q = bus_wait_for_jobs(w, arg_quiet, arg_scope != UNIT_FILE_SYSTEM ? "--user" : NULL);
|
||||||
if (q < 0)
|
if (q < 0)
|
||||||
return q;
|
return q;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue