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 -finiciar 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 -fpara evitar ese problema.Con algunas
tailimplementaciones, puede ser mordido mediante almacenamiento en búfer: eltailproceso 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,tailGNU coreutils (como se encuentra en Linux y en otros lugares) es seguro a este respecto.Cuando detengas al demonio,
echo >/var/run/daemon.fifomatará eltailproceso.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
-Lopción hace que la pantalla escriba todo lo que aparece en su ventana en un archivo. El nombre del archivo se proporcionadaemon.screenrccon lalogfiledirectiva.fuente
stuffcomando 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 cato<fifo tail -f | caten un terminal yecho >fifo; echo >fifoen otro terminal; Creo que estarás bien.