Analizza il seguente script bash?


0

Ho bisogno di aiuto per analizzare il seguente script bash, per capire cosa l'autore stava cercando di fare. Lo script ha lo scopo di cercare un file di registro per i dati e quindi confrontarlo con un file di registro della posta elettronica. Le differenze tra i due file vengono quindi inviate via email a "persone". Recentemente la sceneggiatura ha restituito falsi positivi.

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'

Cosa posso dire finora ...

  1. cat file application.log
  2. tubo cat risultati e grep Data / Ora in formato Y:M:D
  3. Mentre fai quanto sopra, grep Data / Ora in formato D:M:Y a partire dal mail.log file.
  4. Questo è dove mi sono mescolato, sembra che sia così grep -s di nuovo, echo -esegue il risultato in una variabile e quindi utilizza awk per formattare i dati in un modo specifico.
  5. Quindi prende quei risultati formattati e echo -esegue i dati memorizzati nella variabile e li invia via email alle persone che dovrebbero essere avvisate.

DOMANDE:

  • C'è un modo più efficiente per scrivere questo script? Il tubo sembra essere usato troppo.
  • Se lo script restituisce falsi positivi, dov'è la causa più probabile del problema?

Ecco uno snip del file 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

Ecco uno snip del file 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>

Ecco l'e-mail risultante che viene inviata agli utenti nella parte finale della posta dello script:

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

Quindi la notifica risultante (Applicazioni senza notifiche) dovrebbe verificarsi solo quando vi è una voce in applicants.log file che non ha una voce corrispondente nel file mail.log file. Quindi se non ci fosse entrata nel mail.log file per David Stanford, la notifica rifletterebbe SOLO che il server di posta non ha ricevuto un'e-mail per David Stanford. Non lo direbbe né per Danny Couch né per Don Brown perché troverà i loro nomi nel mail.log file. Invece, lo script sta generando la notifica per tutte le applicazioni, non importa se il mail.log il file ha una voce corrispondente al applicants.log file.


1
Per favore controlla se la mia modifica del tuo codice in una forma leggibile non l'ha infranta; correggere se necessario.
Kamil Maciorowski

Sarebbe di grande aiuto se tu fornissi (un frammento di) applicants.log e (un frammento di) mail.log insieme a un testo risultante che entra mailx (per verificare se otteniamo lo stesso risultato). Cerca di generare un falso positivo e dicci dove si trova esattamente nel testo finale. Supponiamo che non conosciamo il formato dei log che utilizzi, quindi è difficile analizzare cosa awk e altri strumenti fanno a loro; a meno che non ci diate alcuni frammenti, cioè. modificare la tua domanda per aggiungere queste informazioni.
Kamil Maciorowski

KM: Ecco i frammenti che hai richiesto. Darò un'occhiata alle tue regolazioni e postback.
Macspt

(1) Cosa c'è di sbagliato nelle pipe? Una lunga linea singola è appena leggibile, vero, ma puoi dividerlo come ho fatto io . (2) Ho ricevuto falsi positivi dalle tue clip perché il mio date "+%b" restituisce il nome abbreviato non inglese. Quali sono le tue impostazioni della lingua? Si prega di aggiungere l'output di printenv | egrep "^LANG|^LC_".
Kamil Maciorowski

1. Niente di sbagliato con le pipe, non sono un esperto quindi ho pensato di chiedere se è il modo migliore per farlo? 2. Ho controllato il server e LANG = en_US.UTF-8
Macspt

Risposte:


0

Così ho scoperto che non era un problema con lo script di per sé. Lo script era pianificato per essere eseguito ogni notte usando cron sotto l'account root. Accesso ai server di posta mail.log il file è stato configurato per utilizzare una chiave privata / pubblica. La chiave pub non è stata copiata correttamente nell'account utente root sul server di posta. Quindi, quando è stato eseguito lo script, non disponeva delle autorizzazioni appropriate per navigare verso mail.log file. Questo è ciò che ha causato il fallimento dello script e generato i falsi positivi, perché non poteva leggere il mail.log file per svuotare i dati da esso.

Quando si imposta un accesso chiave privata / pubblica da client a server, assicurarsi di copiare la chiave pub sull'account utente appropriato che eseguirà lo script. In questo caso la chiave pub era stata copiata su un account amministratore sul server di posta, ma non lo stesso account che stava eseguendo lo script dal file server.

Quindi se BOB sarà l'account che esegue lo script, dovresti avere:

  • /users/bob/.ssh/id_rsa (Sul computer client)
  • /users/bob/.ssh/id_rsa.pub (Sul server si sta tentando di accedere)

Questo è per Mac OSX BTW.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.