15 Şubat 2006

İsimler önemlidir, dikkat etmek gerekir

Tanıştıklarınızın isimlerini unutmamanız gerekir, bir şeye isim verirken özen göstermek gerekir, çünkü isimlendireceğiniz şeyle birlikte yaşayacaktır vereceğiniz isim. Evet isimlendirmek betikler için de önem taşıyor, başıma gelen bir olay bunu iyice öğretti bana.

E-posta sunucumuzda postfix'in yanında gri liste programı olarak postgrey kullanıyoruz uzun süredir. Gelen spam miktarında gözle görülür elle tutulur bir azalma yaşadık. Ancak başımıza gelen bazı üzücü durumlar da oldu. Postgrey, kullandığımız bir yıllık süre içinde 3-4 defa çöktü. Program hiç iz bırakmadan hata vermeden sırra kadem basıyordu. Postgrey çöktüğünde e-posta sunucusu postfix karşı tarafa "Bu tarafta bir ayar hatası var, sonra deneyin" cevabını dönüyor, ve bunu da kayda düşüyor. Genellikle kayıtları düzenli olarak takip ettiğim için kısa süre içinde duruma müdahale edip postgrey'i ayağa kaldırıyordum. Bir keresinde ben tatildeyken çöktü ve bir buçuk hafta müdahale edilmedi, geri döndüğümde kimlere e-postaları ulaşmamış ayıklayıp haber vermem gerekti. Buna bir çözüm bulmak için ufak bir betik yazdım, postgrey-kontrol. Eğer postgrey ölürse, durumu bana haber veriyor ve postgrey'i zorla yeniden başlatıyordu, içeriği de şöyle [[ Evet içerikte yazım hatası var :) Halen böyle ]]
ps -ef |grep postgrey| grep -v grep
if [ $? -ne 0 ]
then
   date >> /var/log/postgey-cok.log ;
   mail -s postgrey_coktu root < /var/log/postgey-cok.log
   /etc/init.d/postgrey zap;
   /etc/init.d/postgrey start;
fi
Sonra bunu cron ile düzenli aralıklarla çalışacak şekilde ayarladım.

Buraya kadar her şey normal değil mi ? Değil. postgrey yine çöktü ve bana haber falan gelmedi. Yoğun olduğum için kayıtlara da bakamadım ve yine bir kaç gün kapımızdan geri çevirdik mesajları. Sorunu anlamaya çalıştım. Betik içindeki ilk satırı komut satırına yazıyorum ve dönen değere bakıyorum, 1. Yani çalışan programlar arasında postgrey diye bir şey yok. Komut satırında sonraki if'i de deniyorum, tamam o da çalışıyor. Ama postgrey-kontrol dosyasını çalıştırıyorum tepki yok. Elle düzeltip bir süre daha kendi haline bıraktım :) Ve yine çöktü ! Bu sefer kesin bir çözüm bulmam gerekliydi. Bu arada sorunun olası sebeplerini de postgrey listesine yazıp görüş aldım, halen neden çöktüğü konusunda bir sonuca ulaşamasam da, benim yazdığım betiğin neden çalışmadığını anladım; yazının başında da değindiğim gibi, isim önemlidir. "postgrey-kontrol" betiği çalışırken, ilk satırdaki komutlar 0 dönüyor, çünkü çalışan programlardan birinin adında "postgrey" var, kendisinin :) Betiğin adı postkontrol yapılır, mutlu mesut beklenir; bakalım bir daha ne zaman çökecek ve bu sefer sorunun asıl kaynağını gösterecek bir iz bırakacak mı.

Bu yazıyı yazmamın asıl amacı ise, gri liste faydalı bir şey :-P Hatalı tespitlere fırsat vermeden spamlerden ve virüslerden büyük oranda kurtuluyorsunuz. Eğer e-posta sunucusu çalıştırıyorsanız mutlaka göz atın derim.

02 Şubat 2006

Rahat bir nefes

En sonunda eksik kalan notumu da tamamladim; böylelikle 2005-2006'nın birinci dönemini bitirmiş oldum. Yani teoride bir aydır tatilde olan ben, pratik olarak da tatile girmiş oldum. İşin güzel yanı, tatile başladığım gün ders kayıtlarımı yaptırdım ve pazartesi günü derslerim başlıyor, ne kadar iç açıcı değil mi :)

Ben yine de fırsattan istifade ettim, bir yerleri kurcalamadan duramadım. Kendi kendine güncelleşen sunuculardan birinin ayar dosyalarındaki değişiklikleri yaptım ( bkz. gentoo ve dispatch-conf ) Sonra kendi kendine günceleşememiş diğer sunucunun derdine derman oldum. Gentoo PHP paketlerinde çeşitli değişiklikler olmuş, paketler birleştirilmiş ve kategorileri değiştirilmiş. Gereken yapıldı, yaklaşık yarım saatliğine kapalı duran bir web sunucusu ve küresel ısınmaya bizden biraz daha katkı sonrasında(derle derle derle) yeni PHP çalışmaya hazır. Uykunun ağırlığı ile gözlerim kapanmaya başlarken diğer güncellemeler de yerine oturuyor.

Bu arada günün screen ipucu: Uzuuuuun çıktısı olan bir komutu başlattınız, bu çıktı içinde bakmanız gereken yerler olacak, ama aralıklarla ve düzensiz bir biçimde. Aksilik bu ki komutun çıktısını bir dosyaya yönlendirmeyi de unuttunuz. Screen imdadınıza yetişiyor ve... (screen kullanıyorsunuz değil mi ?) control-a H ile komutumuzun çıktısını bir dosyaya kaydetmeye başlıyoruz ( ve aynı tuş vuruşlarıyla kayıt işlemini bitirebiliyoruz )