diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2020-07-22 15:49:29 +0200 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2020-07-22 17:58:12 +0200 |
commit | 94d1ddbd7cd15b1073757eb5ae0645c83f0b414c (patch) | |
tree | 28d45230b9b4dc2951ad8e3129576dc98c4db471 /src | |
parent | 74c8e3c4e082121d8bc578d07d7a3843c61c2bd1 (diff) | |
download | systemd-94d1ddbd7cd15b1073757eb5ae0645c83f0b414c.tar.gz |
pid1: target units can fail through dependencies
Fixes #16401.
c80a9a33d04fb4381327a69ce929c94a9f1d0e6c introduced the .can_fail field,
but didn't set it on .targets. Targets can fail through dependencies.
This leaves .slice and .device units as the types that cannot fail.
$ systemctl cat bad.service bad.target bad-fallback.service
[Service]
Type=oneshot
ExecStart=false
[Unit]
OnFailure=bad-fallback.service
[Service]
Type=oneshot
ExecStart=echo Fixing everythign!
$ sudo systemctl start bad.target
systemd[1]: Starting bad.service...
systemd[1]: bad.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: bad.service: Failed with result 'exit-code'.
systemd[1]: Failed to start bad.service.
systemd[1]: Dependency failed for bad.target.
systemd[1]: bad.target: Job bad.target/start failed with result 'dependency'.
systemd[1]: bad.target: Triggering OnFailure= dependencies.
systemd[1]: Starting bad-fallback.service...
echo[46901]: Fixing everythign!
systemd[1]: bad-fallback.service: Succeeded.
systemd[1]: Finished bad-fallback.service.
Diffstat (limited to 'src')
-rw-r--r-- | src/core/target.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/core/target.c b/src/core/target.c index a1d1cfc38a..65affcec19 100644 --- a/src/core/target.c +++ b/src/core/target.c @@ -193,6 +193,8 @@ const UnitVTable target_vtable = { "Target\0" "Install\0", + .can_fail = true, + .load = target_load, .coldplug = target_coldplug, |