2013-01-18 22 views
6

Mam ten kod do ogona zdalnych plików dziennika:ogon z grep zdalnych plików dziennika

def do_tail(session, file) 
     session.open_channel do |channel| 
     channel.on_data do |ch, data| 
     puts "[#{file}] -> #{data}" 
     end 
     channel.exec "tail -f #{file}" 
    end 

    Net::SSH.start("host", "user", :password => "passwd") do |session| 
     do_tail session, "/path_to_log/file.log" 
     session.loop 

chcę pobrać tylko te wiersze z „błąd” string w file.log próbuję zadzwonić „ogon -f # {plik} | grep BŁĄD "ale bez powodzenia.

Z góry dziękuję.

+2

Co to jest wyjście 'tail -f # {plik} | grep ERROR'? – Hugo

+3

Możesz spróbować dodać '--line-buffered' do polecenia grep. – Cyrus

+0

Może powinieneś spróbować czegoś takiego jak "bash -c" ogon -f # {plik} | grep BŁĄD '" – user3132194

Odpowiedz

0

Nie jestem pewien, czy chcesz uruchomić tail -f #{file} | grep ERROR wewnątrz .loop. Flaga -f mówi tail, aby zachować transmisję danych i nigdy nie opuszczasz tego strumienia za pomocą Ctrl + C.

Do tego celu możesz użyć prostej komendy Bash, dla której nie potrzebujesz nawet metody .exec. Wypróbuj coś w następujący sposób:

def do_tail session, file 
    @keyword = 'ERROR' 
    session.open_channel do |channel| 
    channel.on_data {|ch, data| puts "[#{file}] -> #{data}"} 
    `grep #{keyword} #{file}` 
    end 
end 
Powiązane problemy