Mailman kullanıcılarını uzun süredir elle güncelliyorduk. Uzun zamandır aklımda olan birşeydi bunu otomatikleştirmek. MySQL veritabanından eposta hesaplarının otomatik olarak alınıp, Mailman liste kullanıcılarının güncellenmesi için bir yazı yazayım dedim. Yarın öbürgün gene lazım olacak…
Kullandığımız sunucuda, Mailman'ın 2.1.9 sürümü kullanılıyor:
# /usr/lib/mailman/bin/version
Using Mailman version: 2.1.9
Üsttede görüldüğü gibi, Mailman'ın tüm çalıştırılabilir dosyaları /usr/lib/mailman/bin klasöründe toplanmış durumda. Farklı bir sürümde veya dağıtımda klasör farklı olabilir. Mailman'ın tüm yönetimsel komutları burada aslında. Aşağıda birkaç örnek var:
list_lists: Tüm listeleri listeler.
list_members <liste_adı>: Bir listenin tüm üyelerini gösterir
sync_members -g=no -w=no -d=no -a=no -f <dosya_adı> <liste_adı>: Listenin üyelerini dosya_adı olarak verilen dosya içindekilere göre günceller. "no" şeklindeki parametreler de her güncellemede kullanıcıların rahatsız olmaması için uyarı epostası almasını engeller.
Bundan sonrası kolay zaten, MySQL'den verileri çek, bir geçici dosyaya yaz, bu dosyayı mailman'a aktar. İşte bunu yapan betik te şöyle bişey:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#!/bin/bash # MySQL veritabanindan verileri cekip, mailman listelerini gunceller # 2012.01.06 - Murat Ozalp MMDIR=/usr/lib/mailman/bin KULLANICI_SAYISI=`mysql -u[VERiTABANI] -p[PAROLA] [VERiTABANI] -e "SELECT COUNT(*) Kullanicilar_Tablosu"` if [ $KULLANICI_SAYISI -gt 500 ]; then ## Kullanici sayisi 10un altinda geliyorsa muhtemelen sorun vardir. # Verileri cek mysql -u[VERiTABANI] -p[PAROLA] [VERiTABANI] --skip-column-names -e "SELECT eposta FROM Kullanicilar_Tablosu" > kullanicilar.liste.txt # Mailman Listelerini guncelle: $MMDIR/sync_members -g=no -w=no -d=no -a=no -f kullanicilar.liste.txt duyuru #Gecici dosyalari sil rm *.liste.txt else echo "MySQLde sorun var muhtemelen. Kullanici sayisi az gorunuyor." fi |
Bundan sonra yapılacak tek şey, Cron'a görev zamanlaması eklemek.