Brechen Sie das folgende Bash-Skript auf?

458
Macspt

Ich brauche Hilfe, um das folgende Bash-Skript zu zerlegen, um zu verstehen, was der Autor versucht hat. Das Skript soll eine Protokolldatei nach Daten durchsuchen und diese dann mit einer E-Mail-Protokolldatei vergleichen. Unterschiede zwischen beiden Dateien werden dann per E-Mail an "Personen" gesendet. Das Skript hat vor kurzem falsch positive Ergebnisse zurückgegeben.

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' 

Was kann ich bisher sagen ...

  1. cat Datei application.log
  2. Pipe- catErgebnisse und grepDatum / Uhrzeit im FormatY:M:D
  3. Während dabei die oben, grepDatum / Uhrzeit im Format D:M:Yvon mail.logDatei.
  4. Hier bekomme ich es gemischt, es sieht dann so aus, als würde es grep-s wieder echodie Ergebnisse in einer Variablen anzeigen, und dann verwendet awkman die Daten auf eine bestimmte Art und Weise.
  5. Anschließend werden die formatierten Ergebnisse und echodie in der Variablen gespeicherten Daten abgerufen und per E-Mail an die Personen gesendet, die benachrichtigt werden sollen.

FRAGEN:

  • Gibt es eine effizientere Möglichkeit, dieses Skript zu schreiben? Rohr scheint viel zu viel verwendet zu werden.
  • Wenn das Skript falsch positive Ergebnisse zurückgibt, wo liegt die wahrscheinlichste Ursache des Problems?

Hier ist ein Ausschnitt aus der Datei 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 

Hier ist ein Ausschnitt der mail.log-Datei:

[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> 

Hier ist die resultierende E-Mail, die an die Leute im Mail-Abschnitt des Skripts gesendet wird:

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 

Die resultierende Benachrichtigung (Applications Without Notifications) sollte daher nur auftreten, wenn in der applicants.logDatei ein Eintrag vorhanden ist, der keinen entsprechenden Eintrag in der mail.logDatei enthält. Wenn also kein Eintrag in der mail.logDatei für David Stanford vorhanden wäre, würde die Benachrichtigung NUR anzeigen, dass der Mailserver keine E-Mail für David Stanford erhalten hat. Das würde weder für Danny Couch noch für Don Brown sagen, weil sie ihre Namen in der mail.logAkte finden würden. Stattdessen generiert das Skript die Benachrichtigung für alle Anwendungen, unabhängig davon, ob die mail.logDatei einen entsprechenden Eintrag in der applicants.logDatei hat.

0
Bitte überprüfen Sie, ob die Bearbeitung Ihres Codes in einer lesbaren Form diesen nicht beschädigt hat. wenn nötig korrigieren. Kamil Maciorowski vor 6 Jahren 1
Es wäre eine große Hilfe, wenn Sie (einen Ausschnitt aus) "Applicants.log" und (einen Ausschnitt aus) "mail.log" zusammen mit einem resultierenden Text eingeben, der "Mailx" enthält (um zu überprüfen, ob wir dasselbe Ergebnis erzielen). . Versuchen Sie, sie dazu zu bringen, ein falsches Positiv zu generieren, und sagen Sie uns, wo genau der endgültige Text steht. Angenommen, wir kennen nicht das Format der Protokolle, die Sie verwenden. Daher ist es schwierig zu analysieren, was "awk" und andere Tools für sie tun. Es sei denn, Sie geben uns einige Ausschnitte. [Bearbeiten] Ihre Frage, um diese Informationen hinzuzufügen. Kamil Maciorowski vor 6 Jahren 0
KM: Hier sind die Schnipsel, die Sie angefordert haben. Ich werde mir Ihre Anpassungen ansehen und zurückschicken. Macspt vor 6 Jahren 0
(1) Was ist los mit Pfeifen? Eine lange Zeile ist zwar kaum lesbar, aber Sie können sie wie ich teilen (https://superuser.com/revisions/1270941/3). (2) Ich habe aus Ihren Ausschnitten falsch positive Ergebnisse erhalten, da mein "Datum" +% b "" den nicht englischen Namen zurückgibt. Was sind deine Spracheinstellungen? Bitte fügen Sie die Ausgabe von `printenv | egrep "^ LANG | ^ LC_" `. Kamil Maciorowski vor 6 Jahren 0
1. Nichts ist falsch an den Pfeifen, ich bin kein Experte, also dachte ich, ich würde fragen, ob das der beste Weg ist, das zu tun? 2. Ich habe den Server und LANG = en_US.UTF-8 überprüft Macspt vor 6 Jahren 0
Leider kann ich diese Fehlalarme nicht reproduzieren. Wenn ich "LANG = en_US.UTF-8" setze, ist die Ausgabe von "done" leer. Kamil Maciorowski vor 6 Jahren 0

1 Antwort auf die Frage

0
Macspt

Also stellte ich fest, dass es mit dem Skript an sich kein Problem war. Das Skript sollte jede Nacht mit cron unter dem Root-Konto ausgeführt werden. Der Zugriff auf die mail.logDatei des Mail-Servers wurde für die Verwendung eines privaten / pub-Schlüssels konfiguriert. Der Pub-Schlüssel wurde nicht ordnungsgemäß in das Root-Benutzerkonto auf dem Mail-Server kopiert. Wenn das Skript ausgeführt wurde, verfügte es nicht über die erforderlichen Berechtigungen, um zu der mail.logDatei zu navigieren . Dies hat dazu geführt, dass das Skript fehlgeschlagen ist und falsche Positive generiert hat, da es die mail.logDatei nicht lesen konnte, um die Daten aus der Datei herauszugreifen.

Wenn Sie einen privaten / pub-Schlüsselzugriff von Client zu Server einrichten, müssen Sie sicherstellen, dass Sie den pub-Schlüssel in das entsprechende Benutzerkonto kopieren, unter dem das Skript ausgeführt wird. In diesem Fall wurde der Pub-Schlüssel in ein Administratorkonto auf dem Mail-Server kopiert, jedoch nicht mit demselben Konto, mit dem das Skript vom Dateiserver ausgeführt wurde.

Wenn also BOB das Konto ist, das das Skript ausführt, sollten Sie Folgendes haben:

  • /users/bob/.ssh/id_rsa (Auf dem Clientcomputer)
  • /users/bob/.ssh/id_rsa.pub (Auf dem Server, auf den Sie zugreifen möchten)

Dies ist für Mac OSX BTW.