시스템 오류 "OnFailure= 작업을 대기열에 넣을 수 없음: 리소스 교착 상태 방지"의 가능한 원인은 무엇입니까?

시스템 오류 "OnFailure= 작업을 대기열에 넣을 수 없음: 리소스 교착 상태 방지"의 가능한 원인은 무엇입니까?

내 시스템 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의 또 다른 솔루션은 인스턴스에 CloudWatch 경보를 설정하는 것입니다. 인스턴스의 최대 CPU가 15분 동안 CPU 1% 미만으로 떨어지면 알림에 "조치 취하기: 종료" 옵션이 표시됩니다.

관련 정보