Dividir o seguinte script bash?

0

Preciso de ajuda para quebrar o seguinte script, para entender o que o autor estava tentando fazer. O script destina-se a procurar um arquivo de log por dados e, em seguida, compará-lo a um arquivo de log de email. As diferenças entre os dois arquivos são enviadas por e-mail para 'pessoas'. O script foi recentemente retornando falsos positivos.

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"'" '[email protected], [email protected], [email protected]'

O que eu posso dizer até agora ...

  1. cat file application.log
  2. pipe cat results e grep Date / Time no formato Y:M:D
  3. Ao fazer o acima, grep Data / Hora no formato D:M:Y do arquivo mail.log .
  4. Aqui é onde eu misturo, parece que grep -s novamente, echo -es resulta em uma variável e, em seguida, usa awk para formatar os dados de uma maneira específica. / li>
  5. Em seguida, ele obtém os resultados formatados e echo -es dos dados armazenados na variável e os envia por e-mail para as pessoas que devem ser notificadas.

PERGUNTAS:

  • Existe uma maneira mais eficiente de escrever este script? O tubo parece ser usado demais.
  • Se o script estiver retornando falsos positivos, onde está a causa mais provável do problema?

Aqui está um recorte do arquivo candidates.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

Aqui está um recorte do arquivo mail.log:

[26/Nov/2017 06:03:44] Recv: Queue-ID: 5a1aada0-000006fa, Service: SMTP, From: <[email protected]>, To: <[email protected]>, Size: 9571, Sender-Host: mail-sn1nam01lp0119.outbound.protection.outlook.com, SSL: yes, Subject: CIF: 100899-Video Production Specialist: Danny Couch, Msg-Id: <[email protected]>
[26/Nov/2017 06:03:46] Sent: Queue-ID: 5a1aada0-000006fa, Recipient: <[email protected]>, 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: <[email protected]>, To: <[email protected]>, Size: 9886, Sender-Host: mail-by2nam01lp0181.outbound.protection.outlook.com, SSL: yes, Subject: CIF: 100899-Video Production Specialist: Don Brown, Msg-Id: <[email protected]>
[26/Nov/2017 09:14:28] Sent: Queue-ID: 5a1ada53-00000713, Recipient: <[email protected]>, Result: delivered, Status: 2.0.0 , Remote-Host: 127.0.0.1, Msg-Id: <[email protected]>
[26/Nov/2017 09:32:40] Recv: Queue-ID: 5a1ade98-00000719, Service: SMTP, From: <[email protected]>, To: <[email protected]>, Size: 8807, Sender-Host: mail-bn3nam01lp0176.outbound.protection.outlook.com, SSL: yes, Subject: CIF: 100916-Creative Services Team Manager: David Stanford, Msg-Id: <[email protected]>
[26/Nov/2017 09:32:42] Sent: Queue-ID: 5a1ade98-00000719, Recipient: <[email protected]>, Result: delivered, Status: 2.0.0 , Remote-Host: 127.0.0.1, Msg-Id: <[email protected]>

Aqui está o e-mail resultante que é enviado para as pessoas no final da parte de e-mail do script:

Subject: Applicants Without Recruiter Notification For 26/Nov/2017
Message-ID: <[email protected]>
Date: Sun, 26 Nov 2017 23:55:00 -0600
From: System Administrator <[email protected]>
Return-Path: [email protected]

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

Portanto, a notificação resultante (Aplicativos sem notificações) só deve ocorrer quando houver uma entrada no arquivo applicants.log que não tenha uma entrada correspondente no arquivo mail.log . Portanto, se não houvesse nenhuma entrada no arquivo mail.log para David Stanford, a notificação refletiria APENAS que o servidor de email não recebeu um email para David Stanford. Não diria isso para Danny Couch ou Don Brown porque ele encontraria seus nomes no arquivo mail.log . Em vez disso, o script está gerando a notificação para todos os aplicativos, independentemente de o arquivo mail.log ter uma entrada correspondente ao arquivo applicants.log .

    
por Macspt 22.11.2017 / 22:37

1 resposta

0

Então eu descobri que não era um problema com o script em si. O script estava programado para ser executado todas as noites usando o cron na conta root. O acesso ao arquivo mail.log do servidor de e-mail foi configurado para usar uma chave privada / pub. A chave do pub não foi copiada corretamente para a conta de usuários raiz no servidor de email. Portanto, quando o script foi executado, ele não tinha as permissões adequadas para navegar até o arquivo mail.log . Isso foi o que causou a falha do script e a geração dos falsos positivos, porque não foi possível ler o arquivo mail.log para extrair os dados dele.

Quando você configura um acesso de chave privada / pub do cliente para o servidor, certifique-se de copiar a chave do bar para a conta de usuário apropriada que executará o script. Nesse caso, a chave do bar foi copiada para uma conta de administrador no servidor de email, mas não para a mesma conta que estava executando o script do servidor de arquivos.

Então, se o BOB for a conta que está executando o script, você deve ter:

  • /users/bob/.ssh/id_rsa (no computador cliente)
  • /users/bob/.ssh/id_rsa.pub (No servidor que você está tentando acessar)

Isto é para o Mac OSX BTW.

    
por 04.12.2017 / 23:34