У нас есть несколько серверов приложений и центральный сервер мониторинга.
В настоящее время мы запускаем ssh с «tail -f» с сервера мониторинга для потоковой передачи нескольких текстовых файлов журнала в реальном времени с серверов приложений.
Проблема, помимо хрупкости всего подхода, заключается в том, что уничтожение процесса ssh иногда может оставить хвостовые процессы-зомби позади. Мы повозились с использованием -t для создания псевдотерминалов, но он все еще иногда оставляет зомби-процессы, и -t, по-видимому, также вызывает проблемы в другом месте с продуктом планирования заданий, который мы используем.
В качестве дешевого и грязного решения, пока мы не сможем получить надлежащее централизованное ведение журнала (надеюсь, Logstash и RabbitMQ), я надеюсь написать простую оболочку Python, которая будет запускать ssh и "tail -f", по-прежнему захватывать вывод, но сохраните PID в текстовом файле на диске, чтобы мы могли позже убить соответствующий хвостовой процесс, если это будет необходимо.
Сначала я пытался использовать subprocess.Popen, но затем у меня возникли проблемы с фактическим получением вывода "tail -f" обратно в реальном времени (который затем нужно перенаправить в файл) - очевидно, будет множество блокировок/ проблемы с буфером.
Несколько источников рекомендовали использовать pexpect, pxssh или что-то в этом роде. В идеале я хотел бы использовать только Python и включенные в него библиотеки, если это возможно, однако, если библиотека действительно единственный способ сделать это, то я открыт для этого.
Есть ли хороший простой способ заставить Python запустить ssh с помощью «tail -f», получить вывод в реальном времени, напечатанный на локальном STDOUT здесь (чтобы я мог перенаправить в локальный файл), а также сохранить PID в файл для убить потом? Или даже если я не использую ssh с tail -f, какой-то способ по-прежнему передавать удаленный файл в (почти) реальном времени, который включает сохранение PID в файл?
Здоровья, Виктор
РЕДАКТИРОВАТЬ: Просто для уточнения - мы хотим, чтобы хвостовой процесс умирал, когда мы завершаем процесс SSH.
Мы хотим запустить ssh и "tail -f" с сервера мониторинга, затем, когда мы нажмем Ctlr-C, хвостовой процесс на удаленном компьютере также должен умереть - мы не хотим этого остаться позади. Обычно ssh с -t должен это исправить, но он не полностью надежен по непонятным мне причинам и не очень хорошо сочетается с нашим расписанием работы.
Следовательно, использование экрана для поддержания процесса на другом конце — это не то, что нам нужно.
tail -f
- person Petr Viktorin   schedule 07.10.2011