Ruby - Как управлять внешним процессом и отслеживать вывод из веб-приложения?

У меня есть веб-приложение, которое должно иметь возможность взаимодействовать с уже запущенным внешним процессом.

Мне нужно иметь возможность захватывать STDOUT и перенаправлять его в браузер (например, для мониторинга пользователем). Я также хотел бы иметь возможность остановить / перезапустить процесс.

Я рассматривал возможность использования Бога для мониторинга процесса, но не вижу никаких способов прочитать вывод из приложения rails.

Руби 1.9.2 + Рельсы 3.1

Спасибо


person user1032752    schedule 06.11.2011    source источник


Ответы (1)


Я бы начал процесс и записал его вывод в какой-то файл

pid = Process.spawn("cat /dev/random > process.log")

Затем вы можете прочитать этот файл и отобразить его так, как вам нравится.

IO.read('process.log')

И если вы хотите убить процесс, просто используйте

Process.kill(9, pid)

Как видите, вам нужно где-то хранить pid.

Не знаю, как быть с внешним процессом. Вы, вероятно, захотите сохранить pid в том же месте, когда вы запускаете процесс снаружи.

person Simon Perepelitsa    schedule 07.11.2011
comment
Также рекомендуется инкапсулировать эту логику в какой-нибудь объект, например MonitoredProcess. - person Simon Perepelitsa; 07.11.2011
comment
Спасибо за ответ. Процесс уже будет запущен (когда пользователь попадет в веб-приложение) и будет работать непрерывно, поэтому я бы предпочел не записывать вывод в текстовый файл. Интересно, есть ли способ захватывать вывод только тогда, когда это необходимо, а в других случаях перенаправлять на /dev/null. - person user1032752; 08.11.2011
comment
Вы можете очистить этот файл с помощью задачи cron, если вас беспокоит место на диске. Я не думаю, что вы можете динамически изменять вывод для уже запущенного процесса. - person Simon Perepelitsa; 08.11.2011