Actualmente estoy ejecutando un programa de consola del servidor en una pantalla porque necesito leerlo y ocasionalmente enviar comandos.
Me gustaría ejecutar la aplicación como un demonio en segundo plano (iniciar / detener con init).
Podía tail -f
iniciar sesión, pero eso no me permite enviar información al proceso.
¿Hay alguna forma de configurar esto para que pueda leer y enviar entradas, pero aún así tenerlo ejecutándose en segundo plano?
También me gustaría poder enviar información al demonio desde diferentes procesos (un script de shell que podría enviar un comando "Stop \ n", por ejemplo).
scripting
shell-script
tail
Bill K
fuente
fuente
Respuestas:
Leer desde una tubería, escribir en un archivo
Si desea que el daemon lea la entrada producida por algún proceso arbitrario, debe conectar ese proceso a una tubería. Aquí el proceso arbitrario es hacer eco de comandos, y se ejecutará en un contexto diferente. Por lo tanto, cree una tubería con nombre (a menudo llamada fifo en contextos unix).
Y solo escribe comandos en la tubería:
Sin embargo, es poco probable que funcione como tal: hay una buena posibilidad de que el demonio salga cuando vea un final de archivo en su entrada estándar, lo que ocurre tan pronto como finaliza el primer proceso que escribe en la tubería. Puedes usar
tail -f
para evitar ese problema.Con algunas
tail
implementaciones, puede ser mordido mediante almacenamiento en búfer: eltail
proceso esperará hasta que haya acumulado suficientes bytes para emitir algo de salida. No creo que esto sea solucionable en la caja de herramientas POSIX; Si eso es un problema, utilice un programa trivial C o Perl o Python. Por lo que puedo decir,tail
GNU coreutils (como se encuentra en Linux y en otros lugares) es seguro a este respecto.Cuando detengas al demonio,
echo >/var/run/daemon.fifo
matará eltail
proceso.Inicio del programa dentro de la pantalla
En lugar de invocar el demonio directamente desde su administrador de servicio (¿realmente está usando solo SysV init, o algo adicional como scripts de envoltura o Upstart?), Invoque
Dado que el demonio no será un proceso secundario del administrador de servicios, debe asegurarse de enviar una señal al proceso correcto. Cómo hacerlo depende exactamente de cómo se inicia el demonio y por qué.
Es técnicamente posible adjuntar un proceso en ejecución a una terminal, pero existe el riesgo de que bloquee el programa, por lo que definitivamente está fuera de servicio para un sistema de producción.
La
-L
opción hace que la pantalla escriba todo lo que aparece en su ventana en un archivo. El nombre del archivo se proporcionadaemon.screenrc
con lalogfile
directiva.fuente
stuff
comando de pantalla ). Pero no necesita la sobrecarga (procesamiento, pero lo más importante cognitivo) de un terminal aquí, una tubería es casi suficiente (es suficiente con un pequeño proceso de retransmisión que ignora el final del archivo). Es posible que desee experimentar un poco con<fifo cat
o<fifo tail -f | cat
en un terminal yecho >fifo; echo >fifo
en otro terminal; Creo que estarás bien.