]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
pid1: when showing error status, do not switch to status=temporary
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 29 Feb 2020 16:19:46 +0000 (17:19 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sun, 1 Mar 2020 10:42:42 +0000 (11:42 +0100)
We would flip to status=temporary mode on the first error, and then switch back
to status=auto after the initial transaction was done. This isn't very useful,
because usually all the messages about successfully started units and not
related to the original failure. In fact, all those messages most likely cause
the information about the prime error to scroll off screen. And if the user
requested quiet boot, there's no reason to think that they care about those
success messages.

Also, when logging about dependency cycles, treat this similarly to a unit
error and show the message even if the status is "soft disabled" (before we
wouldn't show it in that case).

man/systemd.xml
src/core/job.c
src/core/manager.c
src/core/manager.h
src/core/transaction.c
src/core/unit.c
src/core/unit.h

index 3cad8141db0ed3d557af8ea9cdea61759438e5b7..bbe0834e23395516ceea4c35dd079c2a56d2e613 100644 (file)
 
         <listitem><para>Takes a boolean argument or the constant
         <constant>auto</constant>. Can be also specified without an argument, with
-        the same effect as a positive boolean.  If enabled, the systemd manager (PID
+        the same effect as a positive boolean. If enabled, the systemd manager (PID
         1) shows terse service status updates on the console during bootup.
-        <constant>auto</constant> behaves like <option>false</option> until a unit
-        fails or there is a significant delay in boot. Defaults to enabled, unless
+        <constant>auto</constant> behaves like <option>false</option> until
+        there is a significant delay in boot. Defaults to enabled, unless
         <option>quiet</option> is passed as kernel command line option, in which case
         it defaults to <constant>auto</constant>. If specified overrides the system
         manager configuration file option <option>ShowStatus=</option>, see
index 741c79fdae91372c4a02cbe85c1e2e95aa1dadf8..c45171cea73878bdc1be942768737064c325739e 100644 (file)
@@ -572,7 +572,7 @@ static void job_print_begin_status_message(Unit *u, JobType t) {
         format = job_get_begin_status_message_format(u, t);
 
         DISABLE_WARNING_FORMAT_NONLITERAL;
-        unit_status_printf(u, "", format);
+        unit_status_printf(u, STATUS_TYPE_NORMAL, "", format);
         REENABLE_WARNING;
 }
 
@@ -861,11 +861,10 @@ static void job_print_done_status_message(Unit *u, JobType t, JobResult result)
         else
                 status = job_print_done_status_messages[result].word;
 
-        if (result != JOB_DONE)
-                manager_flip_auto_status(u->manager, true, "job failed");
-
         DISABLE_WARNING_FORMAT_NONLITERAL;
-        unit_status_printf(u, status, format);
+        unit_status_printf(u,
+                           result == JOB_DONE ? STATUS_TYPE_NORMAL : STATUS_TYPE_NOTICE,
+                           status, format);
         REENABLE_WARNING;
 
         if (t == JOB_START && result == JOB_FAILED) {
index 8e7dde634cea235949ac2dfd54c6d9da71341e22..e6739e28abb3b975ca8d1f3433eca96093ae744e 100644 (file)
@@ -4122,6 +4122,9 @@ static bool manager_get_show_status(Manager *m, StatusType type) {
         if (type != STATUS_TYPE_EMERGENCY && manager_check_ask_password(m) > 0)
                 return false;
 
+        if (type == STATUS_TYPE_NOTICE && m->show_status != SHOW_STATUS_NO)
+                return true;
+
         return show_status_on(m->show_status);
 }
 
index 78d2cb5d3f16ce816d5d49ab5c13832adcfd6569..10c34f95433cfcb0eec1f16c4971dc65b77d6281 100644 (file)
@@ -56,6 +56,7 @@ typedef enum ManagerObjective {
 typedef enum StatusType {
         STATUS_TYPE_EPHEMERAL,
         STATUS_TYPE_NORMAL,
+        STATUS_TYPE_NOTICE,
         STATUS_TYPE_EMERGENCY,
 } StatusType;
 
index 8d67f9ce1abe285374b9bd7d80bfd9573976af87..49f43e03278c39d4e31a2b07616262330af1ca93 100644 (file)
@@ -425,7 +425,9 @@ static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsi
                         else
                                 status = " SKIP ";
 
-                        unit_status_printf(delete->unit, status,
+                        unit_status_printf(delete->unit,
+                                           STATUS_TYPE_NOTICE,
+                                           status,
                                            "Ordering cycle found, skipping %s");
                         transaction_delete_unit(tr, delete->unit);
                         return -EAGAIN;
index 35627b3511ba37e5fc7a0ebb1211be38d2803cbf..2816bcef5504e780a3d8f2836cdfbdb917ea816c 100644 (file)
@@ -1659,7 +1659,7 @@ static bool unit_test_assert(Unit *u) {
         return u->assert_result;
 }
 
-void unit_status_printf(Unit *u, const char *status, const char *unit_status_msg_format) {
+void unit_status_printf(Unit *u, StatusType status_type, const char *status, const char *unit_status_msg_format) {
         const char *d;
 
         d = unit_status_string(u);
@@ -1667,7 +1667,7 @@ void unit_status_printf(Unit *u, const char *status, const char *unit_status_msg
                 d = strjoina(ANSI_HIGHLIGHT, d, ANSI_NORMAL);
 
         DISABLE_WARNING_FORMAT_NONLITERAL;
-        manager_status_printf(u->manager, STATUS_TYPE_NORMAL, status, unit_status_msg_format, d);
+        manager_status_printf(u->manager, status_type, status, unit_status_msg_format, d);
         REENABLE_WARNING;
 }
 
index 999c7a7d83c359bc334e5a22bfc25b972026616f..20d78971df069cd5ff824192ee5ac8f168bf2981 100644 (file)
@@ -9,6 +9,7 @@
 #include "condition.h"
 #include "emergency-action.h"
 #include "list.h"
+#include "show-status.h"
 #include "set.h"
 #include "unit-file.h"
 #include "cgroup.h"
@@ -748,7 +749,7 @@ int unit_add_blockdev_dependency(Unit *u, const char *what, UnitDependencyMask m
 int unit_coldplug(Unit *u);
 void unit_catchup(Unit *u);
 
-void unit_status_printf(Unit *u, const char *status, const char *unit_status_msg_format) _printf_(3, 0);
+void unit_status_printf(Unit *u, StatusType status_type, const char *status, const char *unit_status_msg_format) _printf_(4, 0);
 
 bool unit_need_daemon_reload(Unit *u);