pipe viewer: прогресс бар в консоли
Очень часто встречается проблема долгого выполнения команд в консоли и самый обыденный пример - это mysqldump. Было бы очень неплохо выводить более подробную информацию о том, как выполняется наша команда и сколько ещё ждать до завершения, и на помощь приходит утилита pv - pipe viewer.
Начнем с оценки времени:
mysql1 makky # time mysqldump -u root -p db_name --single-transaction > db_name-`date +%w`.sql Enter password: real 0m39.948s user 0m22.732s sys 0m1.888s mysql1 makky # ls -la db_name-`date +%w`.sql -rw-r--r-- 1 root root 2093269453 май 29 15:05 db_name-4.sql mysql1 makky # ls -lha db_name-`date +%w`.sql -rw-r--r-- 1 root root 2,0G май 29 15:05 db_name-4.sql
Вот я выяснил, что дамп снимается около 40 секунд и имеет размер 2Гб. Разворачиваться такой дамп будет очень долго. Можно было бы сделать вот так:
mysql1 makky # mysqldump -u root -p db_name --single-transaction | pv -s 2G > db_name-`date +%w`.sql 1,95GiB 0:00:29 [67,3MiB/s] [==========================================================================================================================================> ] 97% mysql1 makky #
Это уже намного интереснее, но я знал какой объём данных должен быть. Но это пример использования утилиты pv. Размер можно было указать и как 2093269453 (его мы видели выше). Теперь надо дамп развернуть:
mysql1 makky # pv db_name-4.sql | mysql -u root -p db_name 254MiB 0:01:31 [ 3,1MiB/s] [=================> ] 13% ETA 0:09:28
Есть прогрессбар и примерное время выполнения.
Несколько примеров.
Архивирование файлов:
pv access.log | gzip > access.log.gz 811MB 0:00:11 [68.3MB/s] [=> ] 13% ETA 0:00:59
Здесь pv сработал как cat.
Вот ещё подобный пример:
tar -czf - . | pv > out.tgz
А здесь pv также работает как cat, но через именнованный канал -N:
pv -cN source access.log | gzip | pv -cN gzip > access.log.gz
Очень полезный пример. Здесь мы пакуем текущую директорию, сравнивая её размер:
tar -cf - . | pv -s $(du -sb . | awk '{print $1}') | gzip > out.tgz
Передача файла с удаленной машины с сжатием:
ssh makky@server "cat dump.sql | gzip -c" | pv | gunzip > ~/dump.sql
Вот достаточно сложный пример (пример не мой, я нашел его в сети): На локальной машине выполняем:
$ tar -cf - /path/to/dir | pv | nc -l -p 2222 -q 5
На удаленной:
$ nc ИП 2222 | pv | tar -xf -
То есть вы архивируете данные и тут же их отправляете через netcat на удаленную машину, где удаленный netcat принимает данные и через pv распаковывает их. Таким образом вы видите прогрессбар и можете оценивать время завершения команды.
Комментарии (0)
Добавление комментариев закрыто.