Was sind mögliche Ursachen für den Systemd-Fehler „Fehler beim Einreihen in die Warteschlange von OnFailure= Job: Ressourcen-Deadlock vermieden“?

Was sind mögliche Ursachen für den Systemd-Fehler „Fehler beim Einreihen in die Warteschlange von OnFailure= Job: Ressourcen-Deadlock vermieden“?

Meine systemd onFailure-Aufgaben konnten nicht ausgeführt werden und ich sehe Folgendes im systemJournal:

: Fehler beim Einreihen in die Warteschlange OnFailure= Job: Ressourcen-Deadlock vermieden

Welche möglichen Ursachen können diese Meldung auslösen und die OnFailure=Ausführung meiner Aufgabe verhindern?

Ich verwende systemd v229

Antwort1

Was hier genau passiert, ist: Sie lösen shutdown.target aus, systemd verwendet dafür den Jobmodus „irreversibel ersetzen“. Die Einheit schlägt fehl, weil dieses Ziel mit jeder anderen Einheit in Konflikt steht, und löst einen Stopp für diese aus. In der Zwischenzeit muss Ihre Einheit ausgefallen sein, sodass OnFailure= unit ausgelöst wird. Nun steht dies standardmäßig auch in Konflikt mit shutdown.target und löst daher einen Stopp dafür aus. Da der Jobmodus jedoch „irreversibel ersetzen“ war, kann dieser Job nicht abgebrochen und ersetzt werden, und systemd betrachtet dies als eine konfliktbehaftete Transaktion, daher wird sie abgebrochen. manager_add_job schlägt fehl, und dieser Busfehler wird EDEADLK errno zugeordnet, sodass Sie die Zeichenfolge „Ressourcen-Deadlock vermieden“ sehen.

Antwort2

Dies kann beispielsweise in einer Systemkonfiguration ausgelöst werden, die darauf ausgelegt ist, ein System hochzufahren, eine einzelne Aufgabe auszuführen und dann herunterzufahren. Der systemd-Dienst, der auch die fehlgeschlagene OnFailure=Aufgabe enthält, kann außerdem Folgendes enthalten:

ExecStopPost=/usr/bin/sudo /sbin/poweroff

Es gibt einen Deadlock, da der Poweroff-Befehl ausgeführt werden muss, um das Herunterfahren des Geräts abzuschließen. Damit der Poweroff-Befehl jedoch abgeschlossen werden kann, muss er das Gerät stoppen.

OnFailure=Während dieser Deadlock auftritt, wird versucht, den Job auszuführen.

Letztendlich scheint es, als würde die Aktion den Deadlock „gewinnen“ und damit auch die Ausführung der Aufgabe poweroffverhindern .OnFailure=

Eine alternative Lösung bei AWS besteht darin, einen CloudWatch-Alarm für die Instanz einzurichten. Der Alarm verfügt über die Option „Aktion ausführen: Herunterfahren“, wenn die maximale CPU-Auslastung der Instanz 15 Minuten lang unter 1 % liegt.

verwandte Informationen