2010-12-14 17 views
19

Chcę utworzyć skrypt powłoki, który będzie skutecznie przechwytywał ostatnie n linii od sterr i stin, które zostały wyprowadzone na konsolę. Mam sesję screen uruchomiony proces, który będzie go ponownie uruchomić, jeśli się zawiesi poprzez hacky nieskończonej pętli:pobierz ostatnie n wierszy z wyjścia konsoli

#!/bin/bash 
#This script will be started in a screen session 
counter=0 
while [ $counter -lt 10 ]; do 
    ./run_some_process; 
    last_output=#GRAB PREVIOUS OUTPUT FROM CONSOLE HERE AND LOG TO FILE 
    echo -e "$last_output" >> mylog.txt; 
    sleep 5; #sleep for a few seconds before restarting 
done 

Co potrzebne jest do 7. wiersza kodu, by chwycić ostatnie 10 lub tak wierszy z stderr i stdin i dołączyć je do pliku dziennika

Odpowiedz

42
./run_some_process 2>&1 | tail -10 >>logfle 

tail -10 daje ostatnie dziesięć wierszy, 2>&1 przekierowania stdout do stderr, >>logfle dopisuje do pliku dziennika.

+1

dzięki! jedna zmiana lil: ./run_some_process 2> & 1 | tail -10 >> logfle Wygląda na to, że stderr musiał przejść do standardowego wyjścia, aby dotarł do rury. – Hersheezy

+0

O tak, przepraszam, mój błąd ^^ " –

Powiązane problemy