Мне нужна помощь в разборе следующего скрипта 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 '' |rev | cut -c 2-| rev` | grep -q `echo $line |awk ''` || echo $line; done | mailx -s "Applicants Without Notification For `date "+%d/%b/%Y"`" 'person1@email.com, person2@email.com, person3@email.com' Что я могу сказать до сих пор ...
catфайлapplication.logcatрезультаты трубы иgrepДата / Время в форматеY:M:D- Делая выше,
grepДата / Время в форматеD:M:Yизmail.logфайла. - Это то место, где я его перепутал, похоже, что потом -
grepснова, -echo- результаты в переменной, а затем используются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файле.
Пожалуйста, проверьте, не изменило ли мое редактирование вашего кода в удобочитаемую форму; исправить при необходимости.