Tarih çıktısını ve izleme komutunu bir dosyaya kaydedin


23

Linux'a yeni başlayan biriyim ve bir komutu izlemeye ve onu bir dosyaya kaydetmeye çalışıyorum. denedim

izle -t -n 10 "(tarih '+ ZAMAN:% H:% M:% S'; ps aux | grep" desen "| wc -l)" >> günlük dosyası

ve bunun gibi bir sonuç bekliyorum

TIME: 10:32:30    12
TIME: 10:32:40    18
TIME: 10:32:50    2

Günlük dosyasında depolanacak. Ancak, logfile içinde yazdırılamayan karakterler içeri girdiğinde. Bu tür bir çıktıyı li komutundan nasıl alabilirim?

Yanıtlar:


20

Aradığınızı yapmak için basit bir senaryo (@Ignacio'nun belirttiği gibi) hile yapmalı:

while true
do
    echo "$(date '+TIME:%H:%M:%S') $(ps aux | grep "pattern" | wc -l)" | tee -a logfile
    sleep 2
done

Bunun teeyerine, >>terminalinizdeki çıktıları görebilmeniz ve günlüğünüzde yakalayabilmeniz için kullanıyorum.


İlk satırda 1 ile bir hata alıyor gibi görünüyor. Ama doğru olarak değiştirdiğimde işe yaradı. Ancak ekrandaki çıktı, Time'ı gösterir ve iki farklı satırda sayılır, ancak log dosyası sadece sayımı gösterir. Günlük dosyasında Time'ı alıp aynı satırda saymanın bir yolu var mı?
LoudKur

Ah doğru, çünkü tee komutu sadece çalışıyor ps. Cevabımı değiştireceğim.
Kirk

Mükemmel çalışıyor! Teşekkürler. Benzersiz dosyalarda saklanabilmesi için zaman damgasını günlük dosyasına ekleyebilmemin bir yolu var mı?
LoudKur

Günlük dosyası adını mı kastediyorsun? Her gün yeni bir günlük dosyası oluşturmak için günlük dosyası. $ (Tarih +% Y% m% d) gibi bir şey yapabilirsiniz.
Kirk

Ya, ben yaptım. Bu soruya cevap olarak kodu ekledim. Teşekkürler!
LoudKur

37

Bu, watchherhangi bir komut dosyası kullanmadan da kullanılarak kolayca yapılabilir .

watch -t -n 10 "(date '+TIME:%H:%M:%S' ; ps aux | grep "pattern" | wc -l) | tee -a logfile"


1
Doğru. Mac'te ne olduğunu, saatin kutudan çıkmadığını ve taşınabilir çözümü seçtiğini yazdım. Seninkiler çok daha basit.
Kirk

2
Başka bir deyişle, iletilen arg tee -a logfile içerisine bir pipo ekleyin watch. Çok temiz, teşekkür ederim.
Wildcard

7

watchbir ekrana çıkış içindir. Her X saniyede bir komut çalıştırmak istiyorsanız, bunun için sadece bir gecikme döngüsü kullanmanız gerekir.

while true ; do somecommand ; sleep 2 ; done

5

watch bir ncurses programıdır ve bir konsol penceresinde çalıştırılmak üzere tasarlanmıştır (yönlendirilmez), bu yüzden bir dizi yazdırılamayan karakter oluşturur (bunlar imleci yöneten ve ekranı yeniden çizen kontrol karakterleridir).

Date / grep komutlarını bir komut dosyasına taşımayı deneyebilir ve ardından bu komut dosyasını bir cronjob'dan çağırırsınız.


3

Tamam, bir komut dosyasına koydum ve aşağıdaki koda sahip oldum:

#!/bin/sh
NOW=$(date '+%Y%m%d%H%M%S')
LOGFILE="log.$NOW"

while true
do
    echo $(date '+[TIME: %H:%M:%S]   Output: ' ; ps aux | grep "pattern" | wc -l ) | tee -a $LOGFILE
    sleep 2
done

0

Daha iyi / kayıtlı çıktılar almaya çalışırken bu soru ile karşılaştım du -sh $data_path. Burada bulunan "while komutunu uyu" şablonunu kullandım, ancak istediğim çıktıyı vermek için bazı karmaşık AWK kullandım.

while du -sh $data_path; do sleep 1; done | awk '
$1 != size {
    size=$1;
    path=$2;
    time=systime();
    seconds=time-prevtime;
    if(seconds < 1000000000){
        seconds=seconds" seconds"
    }else{
        seconds=""
    }
    print size, path, strftime("%m/%d/%Y@%H:%M:%S", time), seconds; 
    prevtime=time
}'

Aslında bunu oneliner olarak yaptım, bu yüzden noktalı virgül var. Ama okunabilir hale getirmek için, onu kırdım. Çıktı şöyle görünür:

502G /var/lib/cassandra/dump/ 05/22/2018@04:46:17
503G /var/lib/cassandra/dump/ 05/22/2018@04:46:59 42 seconds
504G /var/lib/cassandra/dump/ 05/22/2018@04:47:57 58 seconds
505G /var/lib/cassandra/dump/ 05/22/2018@04:48:55 58 seconds
506G /var/lib/cassandra/dump/ 05/22/2018@04:49:53 58 seconds
507G /var/lib/cassandra/dump/ 05/22/2018@04:50:50 57 seconds
508G /var/lib/cassandra/dump/ 05/22/2018@04:51:46 56 seconds
509G /var/lib/cassandra/dump/ 05/22/2018@04:52:44 58 seconds
510G /var/lib/cassandra/dump/ 05/22/2018@04:53:41 57 seconds

0

İşte tüm çıktıların altında bir zaman damgası olan bir watchüzerinde bir sadece için gerekli bir örnek ps axf. Apache'nin başarısız olduğu zamanları izliyorum. Ben boruya vardı tee, her komut için psve date.

watch 'ps axf | grep --line-buffered "[a]pache2"| tee --append logfile-apache-issue.log; date '+TIME:%H:%M:%S' | tee --append logfile-apache-issue.log'

tail --follow logfile-apache-issue.logOrtaya çıkan dosyanın örnek çıktısı .

29862 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29863 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29864 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29865 ?        S      0:00          \_ /usr/sbin/apache2 -k start
26635 pts/2    S+     0:00  |       \_ tail -n 1000 -f /var/log/apache2/error.log
TIME:02:21:13
13622 ?        SN     0:33      \_ /usr/sbin/apache2 -k start
25038 ?        Ss     0:01      \_ /usr/sbin/apache2 -k start
29859 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29860 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29861 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29862 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29863 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29864 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29865 ?        S      0:00          \_ /usr/sbin/apache2 -k start
26635 pts/2    S+     0:00  |       \_ tail -n 1000 -f /var/log/apache2/error.log
TIME:02:21:15
13622 ?        SN     0:33      \_ /usr/sbin/apache2 -k start
25038 ?        Ss     0:01      \_ /usr/sbin/apache2 -k start
29859 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29860 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29861 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29862 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29863 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29864 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29865 ?        S      0:00          \_ /usr/sbin/apache2 -k start
26635 pts/2    S+     0:00  |       \_ tail -n 1000 -f /var/log/apache2/error.log
TIME:02:21:16
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.