Livejournal
Log in
Post
Friends
My journal
linux007
Получить последние 10 минут почтового лога
Apr 18, 2017 17:11
Скриптик 10min:
#! /bin/bash
TIME=`date -d '-10minute' +%s`
while read line
do
time=`echo $line | cut -f 1,2,3 -d' ' `
time=`date -d "$time" +%s`
if [ $time -gt $TIME ]
then
echo $line
fi
done
Работает безумно медленно. Но работает (
Read more...
)
script
,
parsing
,
awk
,
log
,
bash
,
time
Leave a comment
Back to all threads
what_me
April 19 2017, 08:24:39 UTC
другая версия 10min
#!/usr/bin/env perl -ln
use Time::Piece;
INIT {
$pattern = '%b %d %T';
$start_time = Time::Piece->strptime(localtime->strftime($pattern), $pattern) - 600;
}
print if $start_time < Time::Piece->strptime(substr($_,0,15), $pattern);
Reply
linux007
April 19 2017, 08:28:35 UTC
Красиво (и в смысле цветов, и в смысле кода).
Вопрос, будет ли он работать быстрее, чем bash?
Reply
linux007
April 19 2017, 08:31:24 UTC
Error parsing time at /usr/lib/i386-linux-gnu/perl/5.20/Time/Piece.pm line 469.
ЧЯДНТ?
Reply
what_me
April 19 2017, 08:59:33 UTC
формат входных данных не ожидаемый.
Можно посмотреть кусок лога на котором он не работает?
Reply
linux007
April 19 2017, 09:32:18 UTC
Apr 19 12:30:35 mail140 amavis[8877]: (08877-04) Checking: oSe901dnZfzT [87.252.232.144] ->
Apr 19 12:30:36 mail140 policyd-spf[6662]: None; identity=helo; client-ip=62.134.46.9; helo=mx11.unify.com; envelope-from=noreply.confluence@unify.com; receiver=xxxx
Apr 19 12:30:36 mail140 policyd-spf[6662]: None; identity=mailfrom; client-ip=62.134.46.9; helo=mx11.unify.com; envelope-from=noreply.confluence@unify.com; receiver=xxxxxxxx
Apr 19 12:30:36 mail140 postfix/smtpd[6617]: 5C4DD2C084D: client=mx11.unify.com[62.134.46.9]
Apr 19 12:30:36 mail140 postfix/cleanup[6875]: 5C4DD2C084D: message-id=<1068671887.134762.1492594236036.JavaMail.confluence@gratcf02>
Reply
linux007
April 19 2017, 09:33:06 UTC
Ощущение, что не отрабатывает инициализация, ещё до анализа лога.
Reply
what_me
April 19 2017, 09:46:47 UTC
Так должно быть видно, что ему не нравится
#!/usr/bin/env perl -ln
use Time::Piece;
INIT {
$pattern = '%b %d %T';
$start_time = Time::Piece->strptime(localtime->strftime($pattern), $pattern) - 600;
}
print if eval { $start_time < Time::Piece->strptime(substr($_,0,15), $pattern) };
warn "bad line format: $_\n" if $@;
Reply
linux007
April 19 2017, 10:02:14 UTC
Error parsing time at /usr/lib/i386-linux-gnu/perl/5.20/Time/Piece.pm line 469.
INIT failed--call queue aborted.
Reply
what_me
April 19 2017, 10:15:41 UTC
А вот так работает ли?
$ perl -MTime::Piece -le 'print localtime->strftime("%b %d %T")'
Apr 19 13:13:38
$ perl -MTime::Piece -le 'print Time::Piece->strptime("Apr 19 13:13:38","%b %d %T")'
Sun Apr 19 13:13:38 1970
Reply
linux007
April 19 2017, 11:02:01 UTC
$ perl -MTime::Piece -le 'print localtime->strftime("%b %d %T")'
Крс 19 14:00:42
$ perl -MTime::Piece -le 'print Time::Piece->strptime("Apr 19 13:13:38","%b %d %T")'
Sun Apr 19 13:13:38 1970
Reply
what_me
April 19 2017, 11:28:42 UTC
Белорусская локаль вмешалась
Вот так тогда.
#!/usr/bin/env perl -ln
use POSIX qw(locale_h);
use Time::Piece;
INIT {
setlocale(LC_TIME, "en_US");
$pattern = '%b %d %T';
$start_time = Time::Piece->strptime(localtime->strftime($pattern), $pattern) - 600;
}
print if eval { $start_time < Time::Piece->strptime(substr($_,0,15), $pattern) };
warn "bad line format: $_\n" if $@;
Reply
Back to all threads
Leave a comment
Up
#!/usr/bin/env perl -ln
use Time::Piece;
INIT {
$pattern = '%b %d %T';
$start_time = Time::Piece->strptime(localtime->strftime($pattern), $pattern) - 600;
}
print if $start_time < Time::Piece->strptime(substr($_,0,15), $pattern);
Reply
Вопрос, будет ли он работать быстрее, чем bash?
Reply
ЧЯДНТ?
Reply
Можно посмотреть кусок лога на котором он не работает?
Reply
Apr 19 12:30:36 mail140 policyd-spf[6662]: None; identity=helo; client-ip=62.134.46.9; helo=mx11.unify.com; envelope-from=noreply.confluence@unify.com; receiver=xxxx
Apr 19 12:30:36 mail140 policyd-spf[6662]: None; identity=mailfrom; client-ip=62.134.46.9; helo=mx11.unify.com; envelope-from=noreply.confluence@unify.com; receiver=xxxxxxxx
Apr 19 12:30:36 mail140 postfix/smtpd[6617]: 5C4DD2C084D: client=mx11.unify.com[62.134.46.9]
Apr 19 12:30:36 mail140 postfix/cleanup[6875]: 5C4DD2C084D: message-id=<1068671887.134762.1492594236036.JavaMail.confluence@gratcf02>
Reply
Reply
#!/usr/bin/env perl -ln
use Time::Piece;
INIT {
$pattern = '%b %d %T';
$start_time = Time::Piece->strptime(localtime->strftime($pattern), $pattern) - 600;
}
print if eval { $start_time < Time::Piece->strptime(substr($_,0,15), $pattern) };
warn "bad line format: $_\n" if $@;
Reply
INIT failed--call queue aborted.
Reply
$ perl -MTime::Piece -le 'print localtime->strftime("%b %d %T")'
Apr 19 13:13:38
$ perl -MTime::Piece -le 'print Time::Piece->strptime("Apr 19 13:13:38","%b %d %T")'
Sun Apr 19 13:13:38 1970
Reply
Крс 19 14:00:42
$ perl -MTime::Piece -le 'print Time::Piece->strptime("Apr 19 13:13:38","%b %d %T")'
Sun Apr 19 13:13:38 1970
Reply
Вот так тогда.
#!/usr/bin/env perl -ln
use POSIX qw(locale_h);
use Time::Piece;
INIT {
setlocale(LC_TIME, "en_US");
$pattern = '%b %d %T';
$start_time = Time::Piece->strptime(localtime->strftime($pattern), $pattern) - 600;
}
print if eval { $start_time < Time::Piece->strptime(substr($_,0,15), $pattern) };
warn "bad line format: $_\n" if $@;
Reply
Leave a comment