No estoy seguro de qué terminología usar aquí, así que tengan paciencia.
Estoy escribiendo una aplicación que producemuchode troncos. Pensé que sería genial poder hacer que mi aplicación transmita los registros a foo
, y permitir que otros procesos lean foo
como si fuera una transmisión (como /dev/random
).
Es decir, me gustaría simplemente transmitir registros continuamente en algún lugar (sin tener que preocuparme por cosas del sistema de archivos como archivar, eliminar, etc.) y tener la capacidad de que otros procesos "aprovechen" esa transmisión como si fuera una secuencia interminable. archivo.
¿Cómo voy a hacer esto? Qué es foo
?
Idealmente:
terminal 1
> mkthing foo
> while :; do echo 'abcdefg' >> foo; sleep 1; done
terminal 2
> echo foo
(outputs "abcdefg" every second)
Respuesta1
La forma absolutamente normal de mirar los registros esescribirlos en un archivo. Cuando desee ver los registros, lea el archivo. Para observar las líneas a medida que se agregan al archivo, use un comando comotail -f
, que, una vez que llega al final del archivo, lo mantiene abierto y observa si se le agregan líneas adicionales. La opción -f
es para “seguir”, y enmenospuedes tener el mismo efecto con F
“seguir”; en otros programas esto se puede conocer como “seguir” un archivo porque tail
es la utilidad clásica que hace esto. Verla tail
etiqueta en este sitiopara obtener más información sobre los servicios públicos de relaves.
Si no desea en absoluto escribir los registros en un archivo, puede ejecutar la aplicación enpantallaotmux. Para ejecutar /usr/bin/my_application --some-option
en segundo plano, con pantalla:
screen -S myapp -d -m /usr/bin/my_application --some-option
Para ver los registros:
screen -S myapp -d -r
Presione Ctrl+ A dpara desconectarse, es decir, para dejar de mirar los registros. Mientras observa los registros, también puede enviar información a la aplicación, lo que puede ser deseable o no. Para otorgar acceso de solo lectura, consulte¿Hay alguna manera de ejecutar 'pantalla' en modo de solo lectura?
Con tmux, para iniciar la aplicación:
tmux new-session -s myapp -d /usr/bin/my_application --some-option
Para ver los registros más recientes:
tmux attach -r -t myapp
Presione Ctrl+ A dpara desconectar. Ejecutar tmux attach
sin -r
para poder interactuar con la aplicación.
Atubería con nombreno es lo que quieres. Solo lo menciono porque superficialmente parece apropiado (y mientras escribo, aparece en los comentarios). Hará lo que usted describe:
mkfifo foo
while :; do echo 'abcdefg' >> foo; sleep 1; done
en paralelo con
cat foo
Esto no es lo que quieres porque tiene que haber exactamente un lector. Si no hay lector, el lado de escritura se bloqueará. Si hay varios lectores, cada línea (o fragmento, dependiendo de cómo produce el programa el resultado) será vista exactamente por un lector, elegido más o menos al azar. Si hay un lector y desaparece, el lado de escritura no podrá escribir y recibirá un SIGPIPE si no lo ha desactivado.