Interesuje me da li moguće da se napiše/napravi skripta koja bi mogla da
šalje mail ( svakog sata ) administratoru ( na drugi PC ) o aktivnostima na
ftp ili apache serveru. Recimo da čita xferlog ili access.log i da informacije iz njega ( ili
kompletan log ) šalje email-om na određenu email adresu. Tražio sam o
tim stvarima na google-u ali bez uspjeha.
Kad se otvori editor (vjerovatno vi), dodaj slijedecu liniju, snimi promjene i izadji iz editora:
Nakon toga, svakih sat vremena dobices mail sa sadrzajem datoteke /etc/logfajl na adresu sahbaz@neki.pc (polazim od pretpostavke da je na masini sa koje zelis citati logove pokrenut crond).
umjesto čitavog loga da prebaci samo access od juče
umjesto svakog sata da šalje svakih 5 sati[/quote]
Sto se tice tacke 1., moguce je napraviti filtere razlicitog tipa, koji ce vjerovatno zavisiti od sadrzaja datog log fajla. Ne bi bilo lose da posaljes nekoliko linija svojih logova, da vidimo kako izgledaju i sta sve sadrze.
Osim toga, mozes koristiti razne zvrcke sa cron-om da isfiltriras logove za odredjeni vremenski period. Npr. stavis liniju u crontab, koja ce kopirati log fajl na tacno odredjenu lokaciju tacno u 00:00 sati. Stavis drugu liniju, koja ce u 23:59 izvrsiti diff da uporedi trenutni log sa onim koji si sacuvao u 00:00. Razlika ova dva fajla je log za protekli dan
Za tacku 2., najbolje je da procitas manual page za crontab(5). Relativno je kratak i vrlo dobro opisuje mogucnosti crontab-a.
[quote]
Sat May 17 01:48:16 2003 0 118.80-202-199.nextgentel.com 50595 /share2/anonim/linux_slike/gamingtux.jpg b _ o a IEUser@ ftp 0 * c
Sat May 17 05:16:55 2003 1 gso163-5-002.triad.rr.com 50595 /share2/anonim/linux_slike/gamingtux.jpg b _ o a wsftp70@ ftp 0 * c
Sat May 17 13:32:50 2003 1 118.80-202-199.nextgentel.com 50595 /share2/anonim/linux_slike/gamingtux.jpg b _ o a anonymous@ ftp 0 * c
Sat May 17 13:33:21 2003 1 118.80-202-199.nextgentel.com 50595 /share2/anonim/linux_slike/gamingtux.jpg b _ o a anonymous@ ftp 0 * c
Sat May 17 22:50:44 2003 8 80.65.73.215 50595 /share2/anonim/linux_slike/gamingtux.jpg b _ o a mozilla@example.com ftp 0 * c
Sat May 17 22:51:50 2003 6 80.65.73.215 24576 /share2/anonim/linux_slike/gamingtux.jpg b _ o a mozilla@example.com ftp 0 * i
Sat May 17 22:52:06 2003 8 80.65.73.215 50595 /share2/anonim/linux_slike/gamingtux.jpg b _ o a mozilla@example.com ftp 0 * c[/quote]
Ja bih u ovom slucaju koristio awk. Mozes jednostavno filtrirati logove prema raznim kriterijima na osnovu rednog broja kolone u kojoj se nalaze kljucni podaci. Tako npr., ako zelis dobiti sve poruke poslane 16. maja 2003. godine, mozes u crontab staviti:
Ovdje $2 znaci druga kolona, sto je u slucaju xferlog-a mjesec, $3 je treca kolona (dan), a $5 je peta kolona
Ovo je vrlo jednostavan nacin da dobijes logove za odredjeni dan, ali sam po sebi nije praktican, jer moras hard-kodirati datum u crontab. Bilo bi dobro kada bi jos mogao pomenuti nekoliko vrsta upita koji te zanimaju, pa da pokusamo pronaci odgovarajuca rjesenja za njih…
Ja sam slicnu stvar rijesio sa (n)(g)awk skriptom koja se starta iz
crontaba. Umjesto da saljes citav log mozes u toj skripti filtrirati
ono sto ti je interesantno, napraviti novu datoteku i poslati mail.
gawk i nawk su super za ovakve svrhe.
Mozes npr. startati skriptu iz crontaba svaki sat, ona onda pregleda
log, nade gdje je bio kraj prethodnog sata i nastavi s tog mjesta.
< ‘grep -i “Sat May 30” /etc/logfile’
pa ovo u crontab.[/quote]
I ja sam razmisljao o grep-u, ali ako nisi siguran da li su kolone odvojene space-om ili tab-om, onda je awk lakse i preglednije rjesenje.
Osim toga, ako bi zelio filtrirati logove prema, recimo, velicini fajla, onda bi rjesenje sa awk-om ostalo podjednako pregledno, dok bi se regularni izraz u grep-u blago zakomplikovao.
U svakom slucaju, ako zelis filtrirati po datumu i znas da su polja odvojena space-om, to rjesenje sa grep-om je jednostavnije.