Использование tail для мониторинга активного файла журнала - PullRequest
1 голос
/ 15 февраля 2020

Я запускаю несколько команд 'shred' на нескольких жестких дисках на рабочей станции. Все команды 'shred' запускаются в фоновом режиме, чтобы запускать команды одновременно. Вывод каждого 'клочка' перенаправляется в текстовый файл, и у меня также есть вывод, направленный на терминал. Я использую tail для отслеживания файла журнала на наличие ошибок и прекращения работы сценария, если таковые имеются. Если ошибок нет, скрипт должен просто продолжить работу до завершения. Когда я проверяю его, форсируя сбой диска (отключая диск), он обнаруживает ошибки ввода-вывода, и сценарий останавливается, как и ожидалось. У меня проблема в том, что когда ошибок НЕТ, я не могу заставить 'tail' завершиться после завершения команд 'shred', и сценарий просто зависает в этой точке. Поскольку я добавил команду 'tail' в поле 'while' l oop ниже, я бы подумал, что tail будет продолжать работать до тех пор, пока выполняются процессы 'shred', но затем остановится после 'shred' 'процессы остановлены, что завершает' while 'l oop. Но это не так. Сценарий по-прежнему зависает даже после завершения процессов уничтожения. Если я go перейду к другому терминальному окну, пока скрипт «зависает», и завершу процесс «tail», скрипт продолжится как обычно. Есть идеи, как завершить процесс «хвоста», когда процессы «клочков» исчезнут?

Мой код:

shred -n 3 -vz /dev/sda 2>&1 | tee -a logfile &
shred -n 3 -vz /dev/sdb 2>&1 | tee -a logfile &
shred -n 3 -vz /dev/sdc 2>&1 | tee -a logfile &
pids=$(pgrep shred)
while kill -0 $pids 2> /dev/null; do
    tail -qn0 -f logfile | \
    read LINE
    echo "$LINE" | grep -q "error"
    if [ $? = 0 ]; then
       killall shred > /dev/null 2>&1
       echo "Error encountered. Halting." 
       exit
    fi
 done
 wait $pids

Есть другой код после 'wait', который выполняет другие действия, но это где скрипт висит

1 Ответ

0 голосов
/ 03 мая 2020

Не имеет прямого отношения к вопросу, но вы можете использовать Daggy - Утилита агрегации данных В этом случае все подпроцессы будут завершены основным daggy процессом.

...