Aşağıdaki bash betiğini bozmak?


0

Yazarın ne yapmaya çalıştığını anlamak için aşağıdaki bash betiğini parçalamaya yardım etmem gerekiyor. Komut dosyası bir günlük dosyasını veri aramak ve ardından bir e-posta günlük dosyasıyla karşılaştırmak içindir. Her iki dosya arasındaki farklılıklar daha sonra 'kişilere' e-postayla gönderilir. Senaryo son zamanlarda yanlış pozitifler döndürüyor.

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'

Şimdiye kadar ne söyleyebilirim?

  1. cat dosya application.log
  2. boru catsonuçları ve grepTarih / Saat biçimindeY:M:D
  3. Yukarıdaki yaparken grepformatta Tarih / Saat D:M:Ydan mail.logdosyası.
  4. Bu benim karıştırdığım yer, sanki greptekrar -s, echo-es değişkende sonuçlar awkveriyor ve sonra verileri belirli bir şekilde biçimlendirmek için kullanıyor .
  5. Daha sonra biçimlendirilmiş sonuçları alır ve echodeğişkende depolanan verileri alır ve bildirilmesi gereken kişilere e-posta gönderir.

SORULAR:

  • Bu senaryoyu yazmanın daha etkili bir yolu var mı? Boru çok fazla kullanılıyor gibi görünüyor.
  • Senaryo yanlış pozitif veriyorsa, sorunun en olası nedeni nerededir?

Applicants.log dosyasının bir parçası:

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

İşte mail.log dosyasının bir parçası:

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

İşte betiğin sonundaki posta bölümündeki insanlara gönderilen sonuç e-postası:

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

Dolayısıyla ortaya çıkan bildirim (Bildirimleri Olmayan Uygulamalar) yalnızca applicants.logdosyada dosyada karşılık gelen bir girişi olmayan bir giriş olduğunda gerçekleşmelidir mail.log. Bu nedenle mail.log, David Stanford için dosyaya bir giriş yapılmazsa , bildirim SADECE posta sunucusunun David Stanford için bir e-posta almadığını yansıtır. Bunu Danny Couch veya Don Brown için yapmaz çünkü isimlerini mail.logdosyada bulur . Bunun yerine, komut dosyası, mail.logdosyanın dosyaya karşılık gelen bir girişi olup olmadığına bakılmaksızın tüm uygulamalar için bildirim oluşturur applicants.log.


1
Lütfen, kodunuzu okunabilir bir formda düzenlemem onu ​​bozmadıysa gözden geçirin; Gerekirse düzeltin.
Kamil Maciorowski

applicants.logGirilen mail.logbir metinle birlikte mailx(aynı sonucu elde edip etmediğimizi doğrulamak için ) ve (bir pasajı ) ve ( pasajını) sağladıysanız çok yardımcı olacaktır . Onları yanlış bir pozitif oluşturmaya çalışın ve son metinde tam olarak nerede olduğunu söyleyin. Kullandığınız günlüklerin biçimini bilmediğimizi varsayalım, bu nedenle awkonlara ve diğer araçların onlara ne yaptığını analiz etmek zor ; Bize biraz snippet vermediysen, bu. Edit bu bilgileri eklemek için sorunuzu.
Kamil Maciorowski

KM: İstediğiniz pasajlar burada. Ayarlarına bakıp geri göndereceğim.
Macspt

(1) Borularda yanlış olan nedir? Uzun bir tek satır zar zor okunabilir, doğru, ancak yaptığım gibi bölebilirsiniz . (2) date "+%b"İngilizce olmayan kısaltılmış ismi döndürdüğüm için makbuzlarınızdan yanlış pozitifler aldım . Dil ayarlarınız neler? Lütfen çıktısını ekleyin printenv | egrep "^LANG|^LC_".
Kamil Maciorowski

1. Borularda yanlış olan bir şey yok, uzman değilim, bu yüzden bunu yapmanın en iyi yolu olup olmadığını soracağımı mı düşündüm? 2. Sunucuyu kontrol ettim ve LANG = en_US.UTF-8
Macspt

Yanıtlar:


0

Böylece betiğin kendi başına bir sorun olmadığını keşfettim. Senaryo, her gece root hesabının altındaki cronu kullanacak şekilde programlandı. Posta sunucusunun mail.logdosyasına erişim, bir özel / pub anahtarı kullanacak şekilde yapılandırıldı. Pub anahtarı, posta sunucusundaki kök kullanıcı hesabına düzgün şekilde kopyalanmamış. Bu nedenle, komut dosyası çalıştırıldığında, mail.logdosyada gezinmek için uygun izinlere sahip değildi . Bu, betiğin başarısız olmasına ve yanlış pozitifleri üretmesine neden olan şeydi, çünkü mail.logverileri elden çıkarmak için dosyayı okuyamadı .

İstemciden sunucuya özel / pub anahtarı erişimi ayarlarken, pub anahtarını komut dosyasını çalıştıracak uygun kullanıcı hesabına kopyaladığınızdan emin olun. Bu durumda, pub anahtarı posta sunucusundaki bir yönetici hesabına kopyalandı, ancak komut dosyasını dosya sunucusundan çalıştıran hesapla aynı değildi.

Öyleyse, BOB komut dosyasını çalıştıran hesapsa, şunlara sahip olmalısınız:

  • /users/bob/.ssh/id_rsa (İstemci bilgisayarda)
  • /users/bob/.ssh/id_rsa.pub (Sunucuda erişmeye çalışıyorsunuz)

Bu Mac OSX BTW içindir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.