Tenemos varios servidores de aplicaciones y un servidor de supervisión central.Python para emular la cola remota -f?
Actualmente estamos ejecutando ssh con "tail -f" desde el servidor de supervisión para transmitir varios archivos de registro de texto en tiempo real desde los servidores de la aplicación.
El problema, aparte de la fragilidad de todo el enfoque es que matar el proceso ssh a veces puede dejar atrás procesos de cola zombie. Hemos perdido el uso de -t para crear pseudo-terminales, pero a veces deja los procesos zombies alrededor, y -t aparentemente también está causando problemas en otros lugares con el producto de programación de trabajos que estamos usando.
Como una solución barata y sucia hasta que podamos obtener el registro centralizado correcto (Logstash y RabbitMQ, con suerte), espero escribir un envoltorio simple de Python que comience ssh y "tail -f", aún capturar el resultado, pero almacena el PID en un archivo de texto en el disco para que podamos matar el proceso de cola apropiado más adelante si es necesario.
Al principio intenté usar el subproceso.Popen, pero luego tuve problemas para recuperar la salida "tail -f" en tiempo real (que luego debe redireccionarse a un archivo). Aparentemente habrá una host de problemas de bloqueo/búfer.
Algunas fuentes parecían recomendar el uso de pexpect o pxssh o algo así. Idealmente, me gustaría utilizar solo Python y sus bibliotecas incluidas, si es posible; sin embargo, si una biblioteca es realmente la única manera de hacerlo, entonces estoy abierto a eso.
¿Hay alguna manera fácil y fácil de hacer que Python inicie ssh con "tail -f", obtenga la salida impresa en tiempo real en STDOUT local aquí (para que pueda redirigir a un archivo local) y también guarde el PID a un archivo para matar más tarde? O incluso si no uso ssh con tail -f, ¿alguna forma de seguir transmitiendo un archivo remoto en (casi) en tiempo real que incluye guardar el PID en un archivo?
Saludos, Victor
EDIT: Solo para aclarar - nosotros queremos el proceso de la cola de morir cuando matamos el proceso de SSH.
Queremos empezar ssh y "tail-f" del servidor de supervisión, entonces cuando Ctlr-C que, el proceso de la cola en la caja remota debe morir, así - que No quiere que se quede detrás. Normalmente ssh con -t debería arreglarlo, pero no es totalmente confiable, por razones que no entiendo, y no funciona bien con nuestra programación de trabajo.
Por lo tanto, usar la pantalla para mantener vivo el proceso en el otro extremo no es lo que queremos.
Vea también http://stackoverflow.com/questions/136168/get-last-n-lines-of-a-file-with-python-similar-to-tail – unmounted
@bmvou, que pregunta no tiene nada sobre 'tail -f' –
Tal vez http://stackoverflow.com/questions/1703640/how-to-implement-a-pythonic-equivalent-of-tail-f? – agf