Как вы контролируете ход программы командной строки?

870
Mario

В нашем магазине Windows есть несколько пользовательских программ для командной строки. Эти команды планируется выполнять (из файлов bat) через регулярные промежутки времени с помощью планировщика заданий. Наши задачи извлекают данные из других систем и перетасовывают информацию в файлах через корзины, используемые для управления нашим рабочим процессом. Иногда задача выполняется долго - действительно долго - и это заставляет нас задуматься, действительно ли консольное приложение выполняет свою работу или как-то зависло. (Эти приложения взаимодействуют по сети с другими приложениями.) Во всяком случае, мне интересно, есть ли способ узнать, что приложение делает что-то или оно бездействует. Для нашей обработки опасно убивать такую ​​задачу в середине потока, но мы должны убить процесс, если он просто останется зависшим, чтобы позволить другой работе пройти. (Может быть, блокировка файла может вызвать это, я не знаю.)

I realize we could add logging to our individual apps but I'm hoping to find a solution that can be composed (piped) somehow -- for example, by maybe piping our STDIN/OUT through another monitoring console app. Is this reasonable? Is there something like this on either Unix or Windows?

customcmd | monitor "progress.txt" --label customcmd < customdata.txt > result.txt 2> error.txt 

And maybe the progress.txt looks something like this:

5:01:10pm - customcmd - 20 reads, 20 writes 5:01:15pm - customcmd - 11 reads, no writes 
1
Если вы все равно отправляете STDIN / STDOUT, почему бы просто не передать их напрямую в файл? А затем используйте (например, в Linux) `tail -f file1 -f file2 -f file 3` для отслеживания всех 3 файлов в одном и том же окне. Существует также пакет Unix (предположительно работающий на Cygwin), называемый `multitail`, который разделяет окно для каждого журнала. Или вы можете написать программу, которая собирает и обрабатывает ваши журналы. Peon 10 лет назад 0
Что «повешено» в вашем определении? Что работает на самом деле? Cmd / PowerShell / Bash / ваше приложение? Решения могут отличаться ... Maximus 10 лет назад 0
Вы когда-нибудь находили решение для этого? EJoshuaS 6 лет назад 0
Этот процесс вышел на пенсию, поэтому не проблема. Тем не менее, одним из простых решений будет запись в журнал (например, журнал событий Windows), который мы с тех пор сделали для других процессов. Затем вы можете при необходимости транслировать события через PowerShell. Mario 6 лет назад 0
PowerShell предоставляет механизм для отображения индикаторов выполнения, которые могут работать здесь. Mario 6 лет назад 0

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

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