私のシステムonFailure
タスクは実行されません。system
ログには以下が表示されます。
: OnFailure= ジョブをキューに追加できません。リソースデッドロックを避けてください。
このメッセージをトリガーし、私のタスクが実行されないようにする理由は何ですかOnFailure=
?
systemd v229を使用しています
答え1
ここで何が起こっているのかは、shutdown.targetをトリガーし、systemdが作業モードを使用して「元に戻せないように置き換える」ことです。ターゲットが他のすべてのユニットと衝突して停止を引き起こすため、ユニットは失敗します。同時に、デバイスが確実に失敗したため、OnFailure = unitがトリガーされます。デフォルトでは、これはshutdown.target =とも競合するため、シャットダウンがトリガーされます。ただし、作業モードは元に戻せず、操作を取り消して交換することはできず、systemdはそれを競合するトランザクションと見なして中断されます。 Manager_add_jobが失敗し、このバスエラーがEDEADLK errnoにマップされるため、リソースデッドロックエスケープ文字列が表示されます。
答え2
これは、システムを起動し、単一のタスクを実行してからシャットダウンするように設計されたシステム構成でトリガーできます。失敗した操作を含むsystemdサービスには、次のOnFailure=
ものも含まれます。
ExecStopPost=/usr/bin/sudo /sbin/poweroff
デバイスのシャットダウンを完了するには、poweroffコマンドを実行する必要があり、デッドロックが発生します。ただし、poweroffコマンドの実行を完了するには、デバイスを停止する必要があります。
同時にOnFailure=
デッドロックが発生すると、ジョブは実行を試みます。
最終的に、タスクはデッドpoweroff
ロックをすばやく「勝ち」、タスクのOnFailure=
実行を先取りするように見えました。
AWSのもう1つのソリューションは、インスタンスにCloudWatchアラームを設定することです。インスタンスの最大CPUが15分間CPUの1%未満に低下すると、通知に「対処:終了」オプションが表示されます。