2012-06-11 3 views
4

В настоящее время я работаю с большим набором данных, где даже преобразование формата файла занимает как минимум час на человека, и в результате я часто не знаю, была ли моя команда выполнена или программа заморозилась. Мне было интересно, есть ли у кого-нибудь подсказка, как следить за ходом команд/скриптов, которые я пытаюсь запустить в Linux?Как следить за ходом выполнения команды linux?

Ваша помощь будет очень признательна.

+3

Какие команды? Некоторые из них могут иметь опции для подробного вывода. –

+0

Сценарии оболочки могут быть запущены 'sh -x' вместо' sh', чтобы показать команды до их выполнения. –

+0

Если вы создаете журнал или какой-либо файл, вы можете запустить 'tail -f' в этом файле. –

ответ

3

Если долговечный команда производит некоторый вывод в файл foo.out, вы могли бы сделать watch ls -l foo.out или tail -f foo.out

Вы также можете перечислить /proc/$(pidof prog)/fd, чтобы узнать открытые файлы некоторого prog

+0

выход находится в файлах формата _basic.nii.gz_. Однако, когда я набираю 'ls -l basic.nii.gz', он говорит, что такого файла или каталога не существует – user1442363

+1

Некоторые утилиты временно переименовывают вывод. –

1

Вы можете использовать подробный вывод, но это еще больше замедлит работу.

2

Вы можете следить за системными вызовами программы, используя strace, что позволит вам следить за звонками open.

+0

Предполагаете ли вы указать' strace' в командной строке или вы можете последовательно ввести его? @thiton – user1442363

+0

(Оба :) Вы можете либо «отвязать» команду, либо уже запущенный процесс. –

3

В дополнение к @ basile-starynkevitch answer,
У меня есть сценарий bash, который может измерять, сколько файлов вы обработали в процентах.

Он смотрит в procfs получает текущую позицию от информации fd (/proc/pid/fdinfo) и рассчитывает это в процентах относительно общего размера файла.

См https://gist.github.com/azat/2830255

curl -s https://gist.github.com/azat/2830255/raw >| progress_fds.sh \ 
&& chmod +x progress_fds.sh 

Usage: 
./progress_fds.sh /path/to/file [ PID] 

быть полезным силам ли кому-то

+0

Я взял ваш сценарий в качестве вдохновения и немного расширил механизм. Мой скрипт Python можно просмотреть на странице https://code.activestate.com/recipes/578882-monitor-progress-of-file-descriptors-of-another-pr/. – Alfe

+0

Да, @Alfe приятное улучшение, я буду смотреть на это! Благодаря! – azat

+0

кратким и чрезвычайно полезным, у этого должно быть гораздо больше голосов – pyRabbit

1

Я предполагаю, что не может быть общий ответ на этот вопрос, это просто зависит от типа программы (которая не имеет даже что-то делать с Linux, см. «Проблема с остановкой»).

Если вы используете трубку во время конверсии, я нахожу инструмент pv(1) весьма полезным. Даже если pv не может знать общий размер данных, он помогает увидеть, есть ли реальный прогресс и насколько хорош datarate. Он не является частью большинства стандартных установок и, вероятно, должен быть установлен явно.

Смежные вопросы