Portál AbcLinuxu, 10. května 2025 04:59

Dotaz: Spousteni skriptu nad blokem dat od urciteho datumu.

13.7.2007 08:36 Lenny
Spousteni skriptu nad blokem dat od urciteho datumu.
Přečteno: 294×
Odpovědět | Admin
Ahoj,

mam takovy maly skriptik:

#!/bin/bash
grep "port 603" /var/log/ulogd.syslogemu|awk '{print $1,$2,$3, "IP",$10}'
exit 0
jak vidite je opravdu malicky. Jeho vystupem je neco takoveho:

.
Jul 12 15:55:39 IP SRC=ve.rej.na.ip
.
Jednoduse vyparsuje ze souboru ulogd.syslogemu vsechny pokusy o pripojeni na port 603 z vnejsku site.

Ja bych vas chtel pozadat o nakopnuti, jak zaridit, aby se tento skript spoustel pouze nad novymi zaznamy v souboru ulogd.syslogemu. Tedy, aby si pamatoval datum posledniho kontrolovaneho radku a pri pristim spusteni kontroloval pouze od tohoto radku dal.

Diky moc za vase reakce.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

13.7.2007 09:09 outsider
Rozbalit Rozbalit vše Re: Spousteni skriptu nad blokem dat od urciteho datumu.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nejlepsi je to takhle vubec neresit a pred kazdym zpracovanim ten log odrotovat (man logrotate). Pak zpracovat ten nove vytvoreny "stary" logfile...
Josef Kufner avatar 13.7.2007 10:42 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Spousteni skriptu nad blokem dat od urciteho datumu.
Jo, kale to dělám taky. Je to nejjednodušší a nejefektivnější.
Hello world ! Segmentation fault (core dumped)
13.7.2007 09:11 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Spousteni skriptu nad blokem dat od urciteho datumu.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co takhle si rovnou nakonfigurovat toho log daemona tak, aby ti to házel třeba do /var/log/port603.log ? Krom toho awk umí taky pattern matching tak nechápu proč kvůli tomu spouštíš grep.
awk '/port 603/ {print $1,$2,$3, "IP",$10}' /var/log/ulogd.syslogemu
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
13.7.2007 09:22 Lenny
Rozbalit Rozbalit vše Re: Spousteni skriptu nad blokem dat od urciteho datumu.
No, protoze se s tim vsim teprve ucim :)

Dik za tip.
13.7.2007 11:30 Lenny
Rozbalit Rozbalit vše Re: Spousteni skriptu nad blokem dat od urciteho datumu.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak vysledek vypada takhle:

Vlastni skript:
#!/bin/bash
mail=jmeno@firma.cz
date=`date +"%A, %d %B, %Y"`

awk '/port 603/ {print $1,$2,$3, "IP",$10}' /var/log/ulogd.syslogemu.1>/tmp/work
if test -s /tmp/work; then
    cat /tmp/work|mail -s "Connection report to tcp port 603" $mail
else
    echo "No connection to tcp port 603 were made on" $date|mail -s "Connection report to tcp port 603" $mail
fi

rm -f /tmp/work

exit 0
Nastaveni logrotate:
/var/log/ulogd.syslogemu {
daily
missingok
rotate 30
compress
delaycompress
create
postrotate
/etc/init.d/ulogd reload > /dev/null 2>&1 || true
/usr/local/bin/skript.sh
endscript
}
A cele to spoustim cronem kazdou pulnoc:
00 00 * * * root /usr/sbin/logrotate -s /var/log/logrotate.status /etc/skript.logrotate 2>&1

Urcite by to slo udelat elegantneji, ale tohle je zatim to nejlepsi na co se zmuzu.

Pokud byste ve vysledku videli nejakou zasadnejsi chybu, tak mi dejte prosim vedet.

Diky za reakce.
Josef Kufner avatar 13.7.2007 11:58 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Spousteni skriptu nad blokem dat od urciteho datumu.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Na vytvoření dočasného souboru je rozumější použít mktemp. Vytvoří soubor na správném místě, který zaručeně ještě neexistuje a jeho jméno vytiskne na stdout.
tmpfile=$(mktemp)
awk > "$tmpfile"
cat -- "$tmpfile"
rm -f -- "$tmpfile"
Hello world ! Segmentation fault (core dumped)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.