2012-10-19 34 views
7

Tôi có một tập lệnh chạy dài mỗi giờ mở một tệp, in ra tệp và đóng tệp. Gần đây tôi đã tìm thấy rất hiếm khi, bản in bị lỗi, không phải vì tôi đang kiểm tra trạng thái của bản in mà là do thực tế thiếu các mục trong tệp cho đến khi hệ thống thực sự được khởi động lại!điều gì có thể gây ra lỗi in trong perl?

Tôi bẫy bẫy lỗi mở tệp và viết thư vào nhật ký hệ thống khi điều đó xảy ra và tôi không thấy bất kỳ lỗi nào đang mở vì vậy hiện tại tôi đoán đó có thể là bản in bị lỗi. Tôi không bẫy những thất bại in, mà tôi nghi ngờ hầu hết mọi người không nhưng bây giờ sẽ cập nhật một bản in.

Trong khi đó, câu hỏi của tôi là có ai biết loại tình huống nào có thể khiến bản in bị lỗi khi có nhiều dung lượng đĩa và không tranh chấp cho tệp đã được mở thành công trong chế độ nối thêm không?

Trả lời

7

Bạn có thể hết bộ nhớ (ENOMEM) hoặc vượt quá giới hạn kích cỡ tệp (E2BIG hoặc SIGXFSZ). Bạn có thể có lỗi I/O lỗi thời (EIO). Bạn có thể có điều kiện chủng tộc nếu tập lệnh được chạy đồng thời hoặc nếu tệp được truy cập qua NFS. Và, tất nhiên, bạn có thể gặp lỗi trong biểu thức có giá trị bạn sẽ in.

Một nguyên nhân kỳ lạ mà tôi từng thấy là lỗi tản nhiệt CPU có thể dẫn đến thất bại sprintf sai, gây ra một số kết quả đáng ngạc nhiên bao gồm ghi rác vào tệp mô tả.

Cuối cùng, tôi nhắc bạn rằng in sẽ thường ghi nội dung của nó vào bộ đệm I/O. Điều này có nghĩa là hai điều. (1) Bạn cũng cần kiểm tra kết quả của close(). (2) Nếu bạn in nhưng bạn không ngay lập tức đóng() hoặc flush() thì dữ liệu của bạn có thể được đệm và không thực sự được viết cho đến sau (hoặc không hoàn toàn nếu quá trình chết khủng khiếp).

+0

đoán tốt nhưng tôi chỉ xem và có bộ nhớ miễn phí 67GB vào thời điểm đó. Tôi cũng thấy cùng một kịch bản đã cố gắng cập nhật tệp này đồng thời ghi một tệp nén qua Nén :: Zlib mỗi giây và nó bị ngừng trong 30 giây trước khi in không thành công và ngay lập tức khởi động lại ngay về thời gian in. Vì vậy, có vẻ như hệ thống tập tin tạm thời 'không khả dụng'? –

+0

Nếu hệ thống tệp của bạn tạm thời 'không khả dụng' có nghĩa là bạn có thể gặp phải lỗi đĩa cứng, hãy kiểm tra nhật ký hệ thống của bạn. – OmnipotentEntity

Các vấn đề liên quan