Мне нужна помощь в разборе следующего скрипта bash, чтобы понять, что автор пытался сделать. Сценарий предназначен для поиска данных в файле журнала и сравнения его с файлом журнала электронной почты. Различия между обоими файлами затем отправляются по электронной почте людям. Скрипт недавно возвращал ложные срабатывания.
cat /Shared\ Items/CIF_FILES/logs/applicants/applicants.log |
grep `date "+%Y:%m:%d"` |
while read line; do grep "`date "+%d/%b/%Y"`" /usr/local/kerio/mailserver/store/logs/mail.log |
grep `echo $line |awk '{print $5}' |rev | cut -c 2-| rev` |
grep -q `echo $line |awk '{print $8}'` || echo $line; done |
mailx -s "Applicants Without Notification For `date "+%d/%b/%Y"`" 'person1@email.com, person2@email.com, person3@email.com'
Что я могу сказать до сих пор ...
- файл
cat
application.log
- pipe
cat
результаты иgrep
Дата / Время в форматеY:M:D
- При выполнении вышеизложенного,
grep
Дата / Время в форматеD:M:Y
из файлаmail.log
. - Это где я запутаться, он выглядит , как он затем
grep
-s снова,echo
-es результаты в переменной, а затем используетawk
для форматирования данных определенным образом. - Затем она принимает эти отформатированные результаты и
echo
-es данные , хранящиеся в переменной и электронные письма его к людям , которые должны быть уведомлены.
ВОПРОСЫ:
- Есть ли более эффективный способ написания этого скрипта? Труба, кажется, используется слишком много.
- Если скрипт возвращает ложные срабатывания, где наиболее вероятная причина проблемы?
Вот фрагмент файла Applicants.log:
2017:11:26 - 06:03 - Couch, Danny / 100899-Video Production Specialist
2017:11:26 - 09:14 - Brown, Don / 100899-Video Production Specialist
2017:11:26 - 09:32 - Stanford, David / 100916-Creative Services Team Manager
Вот фрагмент файла mail.log:
[26/Nov/2017 06:03:44] Recv: Queue-ID: 5a1aada0-000006fa, Service: SMTP, From: <_www@server.thecompany.com>, To: <person1@thecompany.com>, Size: 9571, Sender-Host: mail-sn1nam01lp0119.outbound.protection.outlook.com, SSL: yes, Subject: CIF: 100899-Video Production Specialist: Danny Couch, Msg-Id: <20171126120341.866E12750554@server.thecompany.com>
[26/Nov/2017 06:03:46] Sent: Queue-ID: 5a1aada0-000006fa, Recipient: <person1@thecompany.com>, Result: delivered, Status: 2.0.0 , Remote-Host: 127.0.0.1, Msg-Id:
[26/Nov/2017 09:14:27] Recv: Queue-ID: 5a1ada53-00000713, Service: SMTP, From: <_www@server.thecompany.com>, To: <person1@thecompany.com>, Size: 9886, Sender-Host: mail-by2nam01lp0181.outbound.protection.outlook.com, SSL: yes, Subject: CIF: 100899-Video Production Specialist: Don Brown, Msg-Id: <20171126151424.6379027519D6@server.thecompany.com>
[26/Nov/2017 09:14:28] Sent: Queue-ID: 5a1ada53-00000713, Recipient: <person1@thecompany.com>, Result: delivered, Status: 2.0.0 , Remote-Host: 127.0.0.1, Msg-Id: <20171126151424.6379027519D6@server.thecompany.com>
[26/Nov/2017 09:32:40] Recv: Queue-ID: 5a1ade98-00000719, Service: SMTP, From: <_www@server.thecompany.com>, To: <person2@thecopmany.com>, Size: 8807, Sender-Host: mail-bn3nam01lp0176.outbound.protection.outlook.com, SSL: yes, Subject: CIF: 100916-Creative Services Team Manager: David Stanford, Msg-Id: <20171126153239.26CF22751A2F@server.thecompany.com>
[26/Nov/2017 09:32:42] Sent: Queue-ID: 5a1ade98-00000719, Recipient: <person2@thecompany.com>, Result: delivered, Status: 2.0.0 , Remote-Host: 127.0.0.1, Msg-Id: <20171126153239.26CF22751A2F@server.thecompany.com>
Вот итоговое электронное письмо, которое отправляется людям в конце сценария почтовой части:
Subject: Applicants Without Recruiter Notification For 26/Nov/2017
Message-ID: <20171127055500.7BAF0275617B@thecompany.com>
Date: Sun, 26 Nov 2017 23:55:00 -0600
From: System Administrator <admin@server.thecompany.com>
Return-Path: admin@server.thecompany.com
2017:11:26 - 06:03 - Couch, Danny / 100899-Video Production Specialist
2017:11:26 - 09:14 - Brown, Don / 100899-Video Production Specialist
2017:11:26 - 09:32 - Stanford, David / 100916-Creative Services Team Manager
Таким образом, в результате чего уведомление (приложения без уведомления) должно происходить только тогда , когда имеется запись в applicants.log
файл , который не имеет соответствующей записи в файле mail.log
Поэтому, если в файле mail.log
для Дэвида Стэнфорда нет записи, уведомление будет отражать ТОЛЬКО, что почтовый сервер не получил письмо для Дэвида Стэнфорда. Он не сказал бы это ни Дэнни Коучу, ни Дону Брауну, потому что он нашел бы их имена в файле mail.log
. Вместо этого, скрипт генерирует уведомления для всех приложений, независимо от того , если mail.log
файл имеет соответствующую запись в файл applicants.log