Интеграция «наблюдения» с «верхним» протоколированием до завершения — КАК?

Интеграция «наблюдения» с «верхним» протоколированием до завершения — КАК?

Я наткнулся на эту ссылку:«наблюдайте» за выводом команды до тех пор, пока не будет обнаружена определенная строка, а затем выйдите

Я знаю PID процесса. Я хочу зарегистрировать процесс "потребление ресурсов" с помощью top.

По сути top -p PID -b >> LOGFILE.

Я хочу, чтобы это запускалось с шагом, скажем, каждые 5 секунд, используя команду «watch»

watch -n 5

Из независимой/внешней программы я добавлю в файл журнала запись «Мы закончили».

Я хочу, чтобы ведение журнала watch/top прерывалось/завершалось, когда «Мы закончили». Поэтому grepследует оценивать весь файл журнала, а не только текущее значение.

Я хочу, чтобы команда выполнялась в неблокируемой форме... возможно, заканчивалась на " &"

Я установил -d на 5, чтобы top и watch создавались одновременно? ...

Вот моя попытка использовать опцию «-e», предложенную по ссылке выше, но она не работает так, как ожидалось... PID и LOGFILE — подходящие значения.

watch -n 5 -e "!  top -d 5 -b -p PID >> LOGFILE | grep -m 1 \"We Are Finished\"" &

решение1

until grep -qm 1 '\"We Are Finished\"' LOGFILE; do top -d 5 -n 12 -b -p PID >> LOGFILE; done

Если вы хотите выйти из журнала процесса, когда pid больше не выполняется, то приведенный ниже скрипт должен сработать? (это позволяет избежать записи двумя процессами в один и тот же файл?)

Он принимает три параметра: PID, местоположение LOGFILE и ВРЕМЯ между записями журнала.


#!/bin/bash

if [ $# -lt 3 ]
  then
    echo "Usage logpid (PID) (LOGFILE) (Time between in sec)"
    exit 1;
fi

while :
    do 
    if  ps -p $1 > /dev/null ; then
    top -n 1 -b -p $1 >> $2;
    else
    echo "Exited No pid";
    break;
    fi
    sleep $3;   
done

Связанный контент