Интеграция «часов» с «верхней» регистрацией до конца - КАК?

459
mshaffer

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

Я знаю PID процесса. Я хочу войти в процесс "ресурс-потребление", используя top.

В основном top -p PID -b >> LOGFILE.

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

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\"" & 
0
Если вы добавляете стандартный вывод в `LOGFILE`, то ничего не передается в` grep`. Вам нужно передать через `tee -a LOGFILE`, чтобы направить вывод в оба места, или (более сложный) заставить` grep` взять свой ввод из `LOGFILE` после того, как он был записан. AFH 7 лет назад 0
@afh спасибо за идеи ... можешь ли ты предоставить синтаксис тройника? Мне не нужно «более сложное», так как «Мы ​​закончили» не пишется этим циклом просмотра. mshaffer 7 лет назад 0
смотреть -n 5 -e "! top -d 5 -b -p PID >> LOGFILE | grep -m 1 \" Мы закончили \ "LOGFILE" & mshaffer 7 лет назад 0
Я не понимаю ваши комментарии: вы только что повторили свою первоначальную команду с ошибочными дополнительными двойными кавычками. Я дал вам синтаксис в моем комментарии выше: замените `>> LOGFILE` на` | tee -a LOGFILE`, но если `" We Finished "` не пишется, почему вы ищете его? AFH 7 лет назад 0
@AFH «Мы закончены» пишется внешней программой ... Внешняя программа выполняет эту функцию «ведения журнала» .... и функция ведения журнала останавливается на «Мы завершены» mshaffer 7 лет назад 0
Вот почему я добавил «LOGFILE» дважды. однажды на стороне grep ... mshaffer 7 лет назад 0
Извините, я не заметил этого в конце. Вы должны использовать `&&` вместо `|` перед `grep`. Причина, по которой я сказал, что это было более сложным, заключается в том, что `` We Finished "` может находиться в `LOGFILE` до запуска команды, тогда как` tee` обнаруживает строку только при каждом запуске команды. AFH 7 лет назад 1

1 ответ на вопрос

0
MShaffer
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 

Похожие вопросы