Верстакфорум практиков
рекламаiprazon: приватные серверные адреса IPv4 и SOCKS5, безлимитный трафик, бесплатный тест до 2 часов
ФорумСбор данных

Наблюдение за прогоном: что выводить на экран

Денис Прошин
Денис Прошин
Знаток
сообщений 1000
с июн
22 декабря, 17:47первое сообщение

Прогон длинный, часов шесть. Сейчас в консоль сыплется всё подряд: каждый запрос, каждый разобранный товар, каждая ошибка с трассой. Экран летит так, что прочитать невозможно, и когда что-то ломается, я узнаю об этом через полчаса.

Хочу оставить на виду только то, по чему видно состояние. Что туда обычно кладут?

sysdiag
sysdiag
Знаток
сообщений 1975
с фев
1 мая, 08:04#2

Разведите два разных занятия. Экран это приборная панель для человека, файл это протокол для разбора после.

В файл пишите всё подряд, на экран одну строку, которая перерисовывается на месте. Минимальный набор в ней: сделано из скольки, темп за последнюю минуту, доля отказов за последнюю минуту, ожидаемое время до конца по текущему темпу. Последнюю ошибку тоже полезно держать хвостом строки, коротко.

логи читаю раньше почты
Вика Сорокина
Вика Сорокина
Новичок
сообщений 85
с июл, второй сезон
8 октября, 11:21#3

а как перерисовать строку, если у меня скрипт на bash?

zavarka
zavarka
Участник
сообщений 435
с ноя
15 марта, 14:38#4

printf с возвратом каретки, больше ничего не нужно.

vsego=$(wc -l < spisok.txt); i=0; oshibok=0; start=$(date +%s)
while read -r url; do
  i=$((i+1))
  curl -sf -o /dev/null "$url" || oshibok=$((oshibok+1))
  proshlo=$(( $(date +%s) - start ))
  [ "$proshlo" -gt 0 ] && tempo=$(( i / proshlo )) || tempo=0
  printf '\r%d/%d  темп %d/с  отказов %d        ' "$i" "$vsego" "$tempo" "$oshibok"
done < spisok.txt
printf '\n'

Две мелочи, на которых спотыкаются все.

Первая: строку надо дополнять пробелами справа. Иначе от длинной предыдущей остаётся хвост, и вы читаете смесь двух состояний, гадая, откуда взялась цифра.

Вторая: возврат каретки хорош, пока вывод идёт в терминал. Стоит перенаправить его в файл, и вы получаете одну гигантскую строку без переносов, в которой сложены все шесть часов прогона. Проверяйте, куда пишете, и в файл переключайтесь на обычный перевод строки раз в минуту.

if [ -t 1 ]; then konec='\r'; else konec='\n'; fi
как это выглядит вживую
как это выглядит вживую
чайник кипит, скрипт бежит
Денис Прошин
Денис Прошин
Знаток
сообщений 1000
с июн
22 августа, 17:55#5
zavarka: стоит перенаправить его в файл

Вот это и был мой случай. Прогон запускается из планировщика, весь вывод падает в файл, отсюда там и простыня.

Проверку на терминал вписал, счётчик отказов за минуту тоже. Осталось понять, как заметить, что прогон завис.

sysdiag
sysdiag
Знаток
сообщений 1975
с фев
1 января, 08:12#6

Отдельным файлом с отметкой времени. Раз в пачку скрипт её обновляет, а сторонний наблюдатель раз в пять минут смотрит, насколько отметка постарела.

date +%s > /run/progon.beat

Отметка стоит на месте десять минут, значит прогон встал, и об этом можно узнать письмом или строкой в дежурный чат. По экрану зависание видно только тогда, когда на экран кто-то смотрит.

логи читаю раньше почты