내 시스템 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% 미만으로 떨어지면 알림에 "조치 취하기: 종료" 옵션이 표시됩니다.