Мне нужна помощь в разборе следующего скрипта 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'

Что я могу сказать до сих пор ...

  1. файл cat application.log
  2. pipe cat результаты и grep Дата / Время в формате Y:M:D
  3. При выполнении вышеизложенного, grep Дата / Время в формате D:M:Y из файла mail.log .
  4. Это где я запутаться, он выглядит , как он затем grep -s снова, echo -es результаты в переменной, а затем использует awk для форматирования данных определенным образом.
  5. Затем она принимает эти отформатированные результаты и 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

1 ответ1

0

Так что я обнаружил, что это не проблема со сценарием как таковым. Сценарий должен был запускаться каждую ночь с использованием cron под учетной записью root. Доступ к файлу mail.log почтового сервера был настроен на использование закрытого ключа / ключа публикации . Ключ публикации не был правильно скопирован в учетную запись пользователя root на почтовом сервере. Таким образом, при запуске сценария у него не было необходимых разрешений для перехода к файлу mail.log . Это и привело к сбою сценария и возникновению ложных срабатываний, поскольку он не мог прочитать файл mail.log чтобы извлечь из него данные.

При настройке доступа к секретному ключу / пабу с клиента на сервер убедитесь, что вы скопировали ключ паба в соответствующую учетную запись пользователя, который будет запускать сценарий. В этом случае ключ публикации был скопирован в учетную запись администратора на почтовом сервере, но не в ту учетную запись, на которой выполнялся сценарий с файлового сервера.

Так что, если BOB будет учетной записью, выполняющей скрипт, вы должны иметь:

  • /users/bob/.ssh/id_rsa (на клиентском компьютере)
  • /users/bob/.ssh/id_rsa.pub (на сервере вы пытаетесь получить доступ)

Это для Mac OSX BTW.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .