<div dir="ltr"><div>Summary: If bar depends on foo via Requires and After, a failed restart on foo leaves bar permanently in the failed state, even if a later autorestart successfully brings up foo, even if bar is configured to always restart. Is this how systemd restart and dependency is supposed to work?</div><div><br></div><div>To repro:</div><div><br></div>foo.service:<div><br></div><div><div>[Service]</div><div>Restart=always</div><div>RestartSec=5s</div><div>Type=notify</div><div># sleep forever if /tmp/foo is present, otherwise fail</div><div>ExecStart=/usr/bin/bash -c "if [[ -e /tmp/foo ]]; then systemd-notify --ready; while true; do sleep 99999; done; else exit 1; fi"</div></div><div><br></div><div>bar.service</div><div><br></div><div><div>[Unit]</div><div>Requires=foo.service</div><div>After=foo.service</div><div><br></div><div>[Service]</div><div>Restart=always</div><div>RestartSec=5s</div><div>ExecStart=/usr/bin/bash -c "while true; do /usr/bin/sleep 99999; done"</div></div><div><br></div><div>- Initially, both foo and bar are running.</div><div>- Then I rm'ed /tmp/foo and killed the main process for foo.service.</div><div>- Systemd noticed that foo is dead and attempted to restart it.</div><div>- In doing so, it stopped bar first, then foo.</div><div>- Then it tried to start foo but failed because /tmp/foo was missing.</div><div>- That put bar in a failed state with result 'dependency'.</div><div>- Systemd then tried to restart foo every 5 seconds.</div><div>- At this point I touched /tmp/foo, so foo started successfully.</div><div>- However, systemd didn't bother with starting bar at all in the restart attempts after the first one.</div></div>