2012-10-19 26 views
7

Her saatin bir dosyayı açtığı, yazdırdığı ve dosyayı kapattığı uzun süren bir komut dosyası var. Son zamanlarda çok nadiren buldum, baskı başarısız oluyor, çünkü baskının kendisinin durumunu test ediyorum, ancak aslında sistem yeniden başlatılıncaya kadar dosyadaki eksik girdilerden dolayı!Perl'de yazdırma hatası neden olabilir?

Dosya açık hatalar için tuzağa düşüyorum ve bu olduğunda syslog'a bir mesaj yazarım ve herhangi bir açık hata göremiyorum, bu yüzden başarısız olan baskı olabileceğini tahmin ediyorum. Baskı başarısızlıklarını yakalamıyorum, ki çoğu insan sanmıyorum ama şimdi bir baskıyı güncelleyeceğim.

Bu arada, sorum, herkesin ne tür durumların bir disk dökümanının fazla olduğu ve ek modda başarıyla açılan bir dosya için herhangi bir çekişme olmadığı zaman bir yazdırma ifadesinin başarısız olmasına neden olabileceğini biliyor mu?

cevap

7

Bellek yetersiz (ENOMEM) veya dosya boyutu sınırı aşılmış olabilir (E2BIG veya SIGXFSZ). Eski moda bir G/Ç hatası (EIO) olabilir. Komut dosyası eşzamanlı olarak çalıştırılıyorsa veya dosya NFS üzerinden erişiliyorsa bir yarış durumunuz olabilir. Ve tabii ki, değerini yazdıracağınız ifadede bir hata olabilir. Zamanlar gördüğüm

egzotik nedeni CPU soğutucu arızası tanımlayıcılar dosyaya çöp yazma dahil olmak üzere bazı şaşırtıcı sonuçlar neden sprintf spuriously başarısız yol açabilir olmasıdır.

Son olarak, yazıcının yazılarını çoğunlukla bir G/Ç arabelleğine yazacağını size hatırlatırım. Bu iki şey anlamına geliyor. (1) close() sonucunu da kontrol etmeniz gerekir. (2) Yazdırıyor ancak hemen kapatmıyorsanız() veya flush() ise, verileriniz daha sonraya kadar arabelleğe alınabilir ve gerçekten yazılmaz (ya da işlem korkunç bir şekilde ölürse).

+0

iyi tahmin edeyim ama o anda baktım ve 67GB boş hafıza vardı. Aynı zamanda bu dosyayı güncellemeye çalışan aynı betiği de gördüğümde, sıkıştırılmış bir dosyayı her saniyede bir sıkıştırılmış dosyaya sıkıştırıyor, her saniyede bir sıkıştırılmış dosya yazıyor ve baskı başarısız olana kadar 30 saniye beklemiş ve baskı gerçekleştiği andan itibaren hemen yeniden başlatılmış. Yani dosya sistemi geçici olarak 'müsait değil' görünüyor mu? –

+0

Dosya sisteminiz geçici olarak "kullanılamıyor" ise, büyük olasılıkla bir sabit disk hatasının olduğu anlamına gelir, sistem günlüğünü kontrol edin. – OmnipotentEntity

İlgili konular