Как запустить и остановить команду top в зависимости от состояния? - PullRequest
0 голосов
/ 25 июня 2019

У меня очень мало опыта работы со скриптами bash (это первый, который я пишу, так что ...), но я хотел бы написать скрипт, который проходит через файл журнала (который, конечно, заполняется каждый раз минуты) и ищет определенную фразу (в моем случае это Task x_1 is running).
Если эта фраза найдена, то запускается команда top (ее результаты фильтруются), ее результаты записываются в отдельный файл (который каждый раз отличается - имя состоит из идентификатора x_1 и текущей даты).
Результаты команды top записываются до тех пор, пока не будет найдена фраза Task x_1 is completed.
В идеале, он должен начать поиск Task x_2 is running снова, пока не будут найдены все x. x_1, x_2, ..., x_n - это идентификаторы процессов, я храню их в отдельном файле (list.txt, который состоит из идентификаторов, записанных в отдельных строках).

IFS=$'\n\r' read -d '\r' -r -a  mylist < list.txt
echo ${mylist[1]}
NOW=$(date +"%m-%d-%y")
echo $NOW
for i in "${mylist[@]}"; do
 touch "log_${i}_$NOW.txt"
  if grep "Task ${i} is running" Log.log; then
   grep "Task ${i} is running" Log.log > "log_${i}_$NOW.txt"
   while grep -v "Task ${i} is completed" Log.log; do
    top -b | grep "Process Name" > "log_${i}_$NOW.txt"
   done
  grep "Task ${i} is completed" Log.log > "log4_${i}_$NOW.txt"
 fi
done

Ну, это не работает (очевидно). Мой главный вопрос - можно ли вообще выполнять команду top и фильтровать файл Log.log одновременно? Может быть, есть простая команда, чтобы сделать то же самое, что я пытаюсь достичь с помощью ifs и loop? Если нет - как мой текущий «скрипт» можно исправить для достижения ожидаемого результата?

Любая помощь будет оценена!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...