Как сделать "хвост этого файла, пока этот процесс не остановится" в Bash? - PullRequest
5 голосов
/ 29 сентября 2010

У меня есть пара скриптов для управления некоторыми приложениями (запуск / остановка / список / и т. Д.). В настоящее время мой сценарий «стоп» просто посылает сигнал прерывания приложению, но я хотел бы получить больше отзывов о том, что приложение делает, когда оно закрывается. В идеале я хотел бы начать отслеживать его журнал, затем отправлять сигнал прерывания, а затем продолжать отслеживать этот журнал до тех пор, пока приложение не остановится.

Как это сделать с помощью сценария оболочки?

Ответы [ 2 ]

11 голосов
/ 29 сентября 2010

Для простого отслеживания файла журнала до остановки определенного процесса (используя tail из GNU coreutils ):

do_something > logfile &
tail --pid $! -f logfile

ОБНОВЛЕНИЕ Вышеприведенное содержит условие гонки: если do_something извергает много строк в logfile, tail пропустит все из них, кроме последних. Чтобы избежать этого и всегда tail печатать полный файл журнала, добавьте параметр -n +1 к вызову tail (то есть даже POSIX tail(1)):

do_something > logfile &
tail --pid $! -n +1 -f logfile
0 голосов
/ 06 октября 2010

Вот скрипт Bash, который работает без --pid.Измените $log_file и $p_name, чтобы удовлетворить ваши потребности:

#!/bin/bash

log_file="/var/log/messages"
p_name="firefox"

tail -n10 $log_file
curr_line="$(tail -n1 $log_file)"
last_line="$(tail -n1 $log_file)"

while [ $(ps aux | grep $p_name | grep -v grep | wc -l) -gt 0 ] 
do
        curr_line="$(tail -n1 $log_file)"
        if [ "$curr_line" != "$last_line" ]
        then
                echo $curr_line
                last_line=$curr_line
        fi  
done
echo "[*] $p_name exited !!"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...