¿Es posible crear una transmisión personalizada?

¿Es posible crear una transmisión personalizada?

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 foocomo 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 -fes para “seguir”, y enmenospuedes tener el mismo efecto con F“seguir”; en otros programas esto se puede conocer como “seguir” un archivo porque tailes la utilidad clásica que hace esto. Verla tailetiqueta 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-optionen 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 attachsin -rpara 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.

información relacionada