A levelező szerverünk által kezelt domainek száma folyamatosan nő a növekvő ügyfelek számával arányosan, de ez nem okoz fennakadást. Azonban az egyik nap érzékelhető volt egy kisebb késleltetés a levelek kézbesítésében.
Az okozta a késleltetést, hogy rengetek SPAM ömlött be nem létező e-mail címekre. A levelező szerver megpróbált mindegyikre egy visszautasító (bounce) levelet küldeni, csak az volt a baj, hogy a feladó címek sem léteztek, így ezek a bounce üzenetek felhalmozódtak a kézbesítési sorban (queue). (A feladó e-mail cím valódiságának ellenőrzését sajnos ki kellett kapcsolni, máskülönben sok ügyfél nem kapna meg jópár hírlevelet.)
Pár parancs összekapcsolásával készíthetünk egy olyan statisztikát a hibás címekre érkező levelekről, amely elárulja, hogy domainenként mennyi ilyen levél fordult elő:
2450 domain2.tld 54 domain1.tld 26 domain3.tld ... ...
Ehhez az alábbi parancsot kell kiadni:
1. $ grep 'user unknown' /var/log/mail.log 2. | awk '{print $7}' 3. | sed -e 's/^[^@]+@//' -e 's/>.*//' 4. | sort -f 5. | uniq -c 6. | sort -nr
Nézzük végig a parancsot soronként!
- sorban leszűrjük a user unknown kifejezésre illeszkedő sorokat a /var/log/mail.log fájlból
Aug 7 12:07:29 mail postfix/pipe[20825]: 40F3A25DDE: to=<hibas.cim@domain1.tld>, relay=maildrop, delay=0.07, delays=0.04/0.01/0/0.02, dsn=5.1.1, status=bounced (user unknown. Command output: Invalid user specified. ) - sorban kihasználva, hogy alapesetben az awk whitespace-ek (szőköz, tabulátor, stb.) mentén felszabdalja a sort, kiszűrjük vele a 7. oszlopba került adatot
to=<hibas.cim@domain1.tld>, - sorban levágunk minden járulékos karaktert a domainről
domain1.tld - paranccsal névsor szerint rendeztetjük a domain listát, hogy a következő paranccsal eltávolíthassuk a duplikációkat (ezt a sort is tudná [sort -u], de nem tudja kiírni az előfordulások számát)
- paranccsal megszüntetjük a duplikációkat és egyben lekérdezzük az előfordulások számát is
54 domain1.tld - sorban pedig az előfordulások száma szerint csökkenő sorrendbe rendeztetjük az egész listát