Убить процесс командной строки и перезапустить, если STDOUT изменит то, что я ищу? - PullRequest
0 голосов
/ 13 июня 2011

У меня есть вопрос - я запускаю процесс из командной строки, который имеет некоторые проблемы и выходит каждые несколько часов или около того. Пока я смотрю на проблему, я бы хотел порождать процесс из чего-то, что отслеживает STOUT для определенной строки / регулярного выражения и убивает и перезапускает процесс, если он выводит что-то, что указывает на то, что он не работает.

Я знаю, что мог бы сделать это в корне, используя собственный скрипт на Python / Ruby, но мне было интересно, есть ли какие-нибудь изящные инструменты, которые я мог бы использовать, чтобы сделать это немного чище? Это на Windows, но у меня есть Cygwin на случай, если ответ включает процесс командной строки Unix.

1 Ответ

1 голос
/ 13 июня 2011

программа |grep CRASH_STRING |xargs -l 1 sh -c 'killall program && program'

Хорошо, это будет сделано один раз.Я не уверен, как заставить это работать в цикле.Я подумал об этом еще немного, и, вероятно, это можно сделать, перенаправив стандартный вывод в именованный канал.Но сценарий оболочки, вероятно, окажется более громоздким, чем написание сторожевого таймера на языке сценариев.

Но идея с конвейером выглядит примерно так:

mkfifo /tmp/fifo
program > /tmp/fifo&
while :
do
grep "CRASH_STRING" /tmp/fifo | xargs -l 1 sh -c 'killall program && program > /tmp/fifo&'
done
...