Komut dosyamın çalıştırılmasının ne kadar sürdüğünü VE oluşturduğu bir e-postaya dahil etmeyi nasıl ölçebilirim?


11

Ben çek (bir dizi çalışan bir basit bash komut dosyası var ping, nslookupvb) ve daha sonra bu verilerin çıkışı ile bir e-posta raporu gönderir.

E-postanın tüm komut dosyasının çalışmasının ne kadar sürdüğü hakkında bilgi içermesini istiyorum. Bu bilgileri toplamanın kolay bir yolu var mı?

Yanıtlar:


15

bashDeğişkene göz atmanızı öneririm SECONDS:

SECONDS : Bu parametreye her başvuruda bulunulduğunda, kabuk çağrılmasından bu yana geçen saniye sayısı. SECONDS öğesine bir değer atanırsa, sonraki başvurularda döndürülen değer, atamadan bu yana geçen saniye sayısı ve atanan değerdir.

Böylece betiğin sonunda bu değişkeni yazdırabilirsiniz. Alternatif olarak, niyetiniz programın sadece bir bölümünün zamanını SECONDS=0ölçmekse, ölçülen komut bloğunun başlangıcında ayarlayın ve sonunda bu değişkente depolanan değeri kullanın.


Hiç bilmiyordum $SECONDS; bu harika! Buna eklemek için saniyeleri saat: dakika: saniye gibi bir şeye dönüştürebilirsiniz date -d "1970-01-01 ${SECONDS} sec" +'%k:%M:%S'( man datedaha fazla biçimlendirme seçeneği için bkz .).
Sparhawk

Bu yaklaşımı gerçekten seviyorum ama hala biraz kafam karıştı. Diyelim ki aynı komut dosyasını birbirinden birkaç saniye arayla çalıştırıyorum. Bir SECONDS=0komut dosyasını ve başka bir komut dosyasında aynı şeyi ayarlarsam , birbirlerine müdahale ederler mi?
Mike B

3
Nevermind - Tom'un bir Stack Overflow yayınındaki ( stackoverflow.com/a/5153036/344780 ) geri bildirimi tökezledim START_TIME=$SECONDS; dosomething; ELAPSED_TIME=$(($SECONDS - $START_TIME)). Bu eşzamanlı kullanım için biraz daha esnek görünüyor.
Mike B

8

Komutunuzun /usr/bin/timeönüne önek eklediğinizde time komutu, komut dosyasının çalışması için geçen süreyi verir. Bu, bashbelirli bir şey kullanmaktan daha taşınabilir .


6

Kullanırken SECONDSve timesize göreli değerler verecektir. Denetim ve Raporlama Amaçları için komut dosyasının ne zaman ve ne zaman tamamlandığına ilişkin mutlak değerlere sahip olmak istiyorsanız, komutlarınızdan önce ve sonra böyle bir şey denemek isteyebilirsiniz date '+%Y%m%d%H%M%S.%N'. Bu da size daha iyi bir ayrıntı verebilir, çünkü pingnormalde bir saniye içinde yürütülecek komutlara sahip olduğunuzdan, ikinci-altı farklılıkları yakalayabilir .


1

Komut dosyanızı iç içe geçirin. Bir e-posta göndermek için birkaç seçenek vardır. Ben şahsen bunun için msmtp tercih, başlıkları kendiniz "burada" tarzı (satır içi) tanımlayabilir veya ayrı bir dosya kullanın ve onları birlikte kedi. Buna perl, python vb. İçeren her türlü alternatif vardır.

Reply-To: someone@somehost
Sender: someone <someone@somehost>
To: somebody@somewhere.else
Subject: some subject
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Type: text/html; charset="iso-8859-1"

Sondaki boş satır önemlidir. monte mesajınızı böylece msmtp içine kedi:

cat assembled.eml | msmtp somebody@somewhere.else

Kötümser, başarılı olana kadar makul sayıda döngü yapardı.

Yük de html olabilir ve php üretilebilir.

Bir gecede "toplu" işlem için çok çirkin bir alternatif, bir cronjob oluşturmak ve çıktı stdout / stderr yerine e-postayla gönderilir.

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.