2010-12-02 17 views

cevap

43
tail -fn0 logfile | \ 
while read line ; do 
     echo "$line" | grep "pattern" 
     if [ $? = 0 ] 
     then 
       ... do something ... 
     fi 
done 
+2

ah, bir şey daha, 'kuyruk -fn0 logfile' HTTP sunucusu log dosyası hızla yeniden adlandırılır ve işlemi sırasında sıkıştırılacak çünkü sona gibi görünüyor. Script hala eski dosya tanıtıcıyı izliyor mu? 'Kuyruk' komutu için bir süre sonra dosya inode veya bir şey otomatik güncelleme için bir yolu var mı? – est

+9

Sadece kuyruk komutuna --retry ekleyin veya -f yerine -F'yi kullanın. Bu yapmalı. – Zizzencs

+1

Ayrıca grep -q' ile eşleşen satırları görüntülemeden dönüş kodunu ayarlamayı düşünün. –

12

Ben de desen bulunduğunda sesini izleyecek ve bazı eylemi gerçekleştirmek için awk kullanabilirsiniz bulundu:

tail -fn0 logfile | awk '/pattern/ { print | "command" }' 

Bu komutu yerine getirecektir desen günlüğüne bulunduğunda. Komut, kabuk betikleri veya başka bir şey dahil olmak üzere herhangi bir unix komutu olabilir.

3

Daha da sağlam bir yaklaşım monit. Bu araç çok fazla şeyi izleyebilir, ancak bunlardan biri, bir veya daha fazla günlükleri kolayca takip edebilecek, normal ifadelerle eşleşecek ve bir betiği tetikleyecektir. Bu, izlemek için bir günlük dosya koleksiyonu veya tetiklemek için birden fazla olay varsa, özellikle yararlıdır.

0

Simple Automated Solution that covers a lot of scenarios:

KULLANIMI:

logrobot localhost [default-dir],fixer,[exit-codes],[command/script-to-run-per-exit-code] [feature] [logfile] [age] [str-1] [str-2] [WARN] [CRIT] [tag] [option] 

ÖRNEK: Bu araç ile

logrobot localhost /tmp/logXray,fixer,0y-1y-2y,0-uname,1-who,2-uptime autonda /var/log/kern.log 60m 'error' '.' 1 2 app_err_monitor -ndshow 

, bir günlük dosyasında belirli kalıpları izlemek ve sonra bir komut tetikleyebilir ya da kalıp bulunduğunda komut dosyası ... veya bulunamadı!

Komut dosyaları veya komutlar, eşiklere ve çıkış kodlarına göre çalışacak şekilde ayarlanabilir.

Araç doğrudan here yüklenebilir.

1

Meyilli ve basit:

tail -f log.txt | egrep -m 1 "error" 
echo "Found error, do sth." 
... 
+1

Bazı acil yardımlar sağlayabilen bu kod parçacığı için teşekkür ederiz. Doğru bir açıklama [// meta.stackexchange.com/q/114762] değerini gösteren eğitim değeri * niçin * bu soruna iyi bir çözümdür ve bunu benzer gelecekteki okuyuculara daha yararlı hale getirecektir. ama aynı değil, sorular. Lütfen cevabınızı açıklama eklemek için düzenleyin ve hangi sınırlamaların ve varsayımların geçerli olduğuna dair bir gösterge verin. –