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

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

내 시스템 onFailure작업이 실행되지 않았으며 system저널에 다음이 표시됩니다.

: OnFailure= 작업을 대기열에 넣지 못했습니다. 리소스 교착 상태를 방지했습니다.

OnFailure=이 메시지를 트리거하고 내 작업 실행을 방해할 수 있는 가능한 원인은 무엇입니까 ?

나는 systemd v229를 사용하고 있습니다

답변1

여기서 정확히 일어나는 일은 다음과 같습니다. shutdown.target을 트리거하면 systemd는 이에 대해 'replace-irreversously' 작업 모드를 사용합니다. 이 목표는 다른 모든 유닛과 충돌하고 중지를 유발하기 때문에 유닛이 실패합니다. 그 사이에 장치가 실패했기 때문에 OnFailure= 장치가 트리거됩니다. 이제 기본적으로 이것도 shutdown.target과 충돌하므로 중지가 트리거됩니다. 그러나 작업 모드는 되돌릴 수 없게 교체되었으므로 해당 작업을 취소하고 교체할 수 없으며 systemd는 이를 충돌하는 트랜잭션으로 간주하여 중단됩니다. Manager_add_job이 실패하고 이 버스 오류는 EDEADLK errno에 매핑되므로 리소스 교착 상태 방지 문자열이 표시됩니다.

답변2

이는 시스템을 부팅하고 단일 작업을 실행한 다음 종료하도록 설계된 시스템 구성에서 트리거될 수 있습니다. 실패한 OnFailure=작업도 포함하는 systemd 서비스에는 다음이 포함될 수도 있습니다.

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

장치 종료를 완료하려면 poweroff 명령을 실행해야 하는 교착 상태가 있습니다. 그러나 poweroff 명령 실행을 완료하려면 장치를 중지해야 합니다.

한편, OnFailure=이 교착 상태가 발생하는 동안 작업이 실행을 시도하고 있습니다.

poweroff궁극적으로 해당 작업은 곧 교착 상태를 "승리"하고 작업 실행을 선점하는 것으로 보입니다 OnFailure=.

AWS의 대체 솔루션은 인스턴스에 CloudWatch 경보를 설정하는 것입니다. 인스턴스의 최대 CPU가 15분 동안 CPU의 1% 미만인 경우 경보에 "조치 취하기: 종료" 옵션이 표시됩니다.

관련 정보