pid1: target units can fail through dependencies
Fixes #16401.
c80a9a33d0
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.
This commit is contained in:
parent
74c8e3c4e0
commit
94d1ddbd7c
|
@ -193,6 +193,8 @@ const UnitVTable target_vtable = {
|
|||
"Target\0"
|
||||
"Install\0",
|
||||
|
||||
.can_fail = true,
|
||||
|
||||
.load = target_load,
|
||||
.coldplug = target_coldplug,
|
||||
|
||||
|
|
Loading…
Reference in New Issue