<div dir="ltr">Tested on v229.</div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jun 10, 2016 at 3:37 PM, Shimin Guo <span dir="ltr"><<a href="mailto:smguo2001@gmail.com" target="_blank">smguo2001@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><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>
</blockquote></div><br></div>