2012-10-19 4 views
7

매 시간마다 파일을 열고 인쇄하여 파일을 닫는 긴 실행 스크립트가 있습니다. 나는 최근에 매우 드물게 발견했습니다. 인쇄가 실패했습니다. 인쇄 자체의 상태를 테스트하고있는 것이 아니라 시스템이 실제로 재부팅 될 때까지 파일에 누락 된 항목이 있기 때문입니다!펄에서 인쇄 오류가 발생할 수 있습니다.

필자는 파일 열기 실패에 대해 함정을하고 syslog에 메시지를 작성하면 열려있는 오류가 보이지 않아 이제는 실패한 인쇄를 추측하고 있습니다. 나는 대부분의 사람들이하지는 않지만 지금은 한 장의 프린트를 업데이트 할 것이라고 생각하는 인쇄 실패를 포착하지는 않습니다.

한편, 제 질문은 디스크 저장 공간이 충분하고 추가 모드에서 성공적으로 열린 파일에 대한 경합이 없을 때 어떤 유형의 상황에서 인쇄 명령문이 실패 할 수 있는지 알 수 있습니까?

답변

7

메모리 부족 (ENOMEM)이거나 파일 크기 제한 (E2BIG 또는 SIGXFSZ) 이상일 수 있습니다. 구식 I/O 오류 (EIO)가있을 수 있습니다. 스크립트가 동시에 실행되거나 NFS를 통해 파일에 액세스하는 경우 경쟁 조건이 발생할 수 있습니다. 물론, 당신이 표현할 가치가있는 표현식에 오류가있을 수 있습니다.

내가 본 한 이국적인 원인은 CPU 히트 싱크 오류로 인해 sprintf가 갑자기 작동하지 않아 파일 설명 자에 쓰레기를 쓰는 등의 놀라운 결과를 초래할 수 있다는 것입니다.

마지막으로 프린트가 I/O 버퍼에 내용을 쓰는 경우가 있음을 알려드립니다. 이것은 두 가지를 의미합니다. (1) close()의 결과도 확인해야합니다. (2) 인쇄하지만 즉시 닫기() 또는 플러시()하지 않으면 데이터가 버퍼링 될 수 있으며 실제로 나중에 쓸 때까지 (또는 프로세스가 끔찍하게 죽는 경우) 전혀 기록되지 않습니다.

+0

좋은 추측이지만 방금 보았을 때 67GB의 여유 메모리가있었습니다. 또한이 파일을 업데이트하려고하는 동일한 스크립트가 Compress :: Zlib를 통해 매 초마다 압축 파일을 작성하고 인쇄가 실패하기 전에 30 초 동안 정지 한 다음 인쇄가 발생했을 때 바로 바로 재시작한다는 것을 알았습니다. 그래서 파일 시스템이 일시적으로 '사용할 수 없음'이었던 것 같습니다. –

+0

파일 시스템이 일시적으로 '사용할 수 없음'인 경우 즉, 하드 디스크 오류 일 가능성이 높습니다. 시스템 로그를 확인하십시오. – OmnipotentEntity

관련 문제