systemctl: suppress error for try-* if unit is masked
authorMike Yuan <me@yhndnzj.com>
Tue, 4 Apr 2023 14:12:32 +0000 (22:12 +0800)
committerLuca Boccassi <luca.boccassi@gmail.com>
Tue, 11 Apr 2023 16:54:02 +0000 (17:54 +0100)
Closes #16521

src/systemctl/systemctl-start-unit.c

index 136b98012a5e5e83be8eb09a451d05f41ee0cc55..3dac7da460b417e357c66e36ba9b12321ed0f962 100644 (file)
@@ -162,7 +162,14 @@ fail:
         if (arg_action != ACTION_SYSTEMCTL)
                 return r;
 
-        log_error_errno(r, "Failed to %s %s: %s", job_type, name, bus_error_message(error, r));
+        if (sd_bus_error_has_name(error, BUS_ERROR_UNIT_MASKED) &&
+            STR_IN_SET(method, "TryRestartUnit", "ReloadOrTryRestartUnit")) {
+                /* Ignore masked unit if try-* is requested */
+
+                log_debug_errno(r, "Failed to %s %s, ignoring: %s", job_type, name, bus_error_message(error, r));
+                return 0;
+        } else
+                log_error_errno(r, "Failed to %s %s: %s", job_type, name, bus_error_message(error, r));
 
         if (!sd_bus_error_has_names(error, BUS_ERROR_NO_SUCH_UNIT,
                                            BUS_ERROR_UNIT_MASKED,
@@ -359,7 +366,6 @@ int verb_start(int argc, char *argv[], void *userdata) {
 
         if (arg_marked)
                 ret = enqueue_marked_jobs(bus, w);
-
         else
                 STRV_FOREACH(name, names) {
                         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;