run: reject --ignore-failure in scope mode

Reproducer:
  sudo systemd-run --scope --ignore-failure /bin/false
  echo $?

Before, the option was accepted but had no effect because scope mode
executes the command locally after creating the scope. The flag is only
encoded into service ExecStart properties, so accept it only where it can
be applied.

Follow-up for 1072d94731
This commit is contained in:
dongshengyuan
2026-07-14 12:03:22 +08:00
parent d8f86dff81
commit dd6c127d6b
3 changed files with 4 additions and 3 deletions
+1 -1
View File
@@ -575,7 +575,7 @@
<listitem><para>By default, if the specified command fails the invoked unit will be marked failed
(though possibly still unloaded, see <option>--collect=</option>, above), and this is reported in the
logs. If this switch is specified this is suppressed and any non-success exit status/code of the
command is treated as success.</para>
command is treated as success. This option is not supported in <option>--scope</option> mode.</para>
<xi:include href="version-info.xml" xpointer="v256"/></listitem>
</varlistentry>
+2 -2
View File
@@ -697,9 +697,9 @@ static int parse_argv(int argc, char *argv[]) {
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Scope execution is not supported on remote systems.");
if (arg_scope && (arg_remain_after_exit || arg_service_type))
if (arg_scope && (arg_remain_after_exit || arg_service_type || arg_ignore_failure))
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"--remain-after-exit and --service-type= are not supported in --scope mode.");
"--remain-after-exit, --service-type= and --ignore-failure are not supported in --scope mode.");
if (arg_scope && arg_no_block)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+1
View File
@@ -115,6 +115,7 @@ systemd-run --scope \
--property=RuntimeMaxSec=10 \
--property=RuntimeMaxSec=infinity \
true
(! systemd-run --scope --ignore-failure false)
: "Transient scope (user daemon)"
# FIXME: https://github.com/systemd/systemd/issues/27883