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 ...
cat
fileapplication.log
- tubo
cat
risultati egrep
Data / Ora in formatoY:M:D
- Mentre fai quanto sopra,
grep
Data / Ora in formatoD:M:Y
a partire dalmail.log
file. - Questo è dove mi sono mescolato, sembra che sia così
grep
-s di nuovo,echo
-esegue il risultato in una variabile e quindi utilizzaawk
per formattare i dati in un modo specifico. - 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.
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.
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_"
.