¿Hay alguna manera de hacerlo de modo que cuando los programas intenten realizar seek()
operaciones en una tubería con nombre vuelva con éxito (pero actúe como si la tubería fuera un archivo vacío) en lugar de 'Búsqueda ilegal'?
Tengo cada último bit de registro en mi sistema almacenado en una base de datos SQLite, no tengo archivos en ningún lado. Sin embargo, hay algunos programas que tienen problemas con esto. Hay 2 casos específicos;
- Un programa quiere escribir en un archivo de registro que syslog-ng ha creado como una tubería con nombre y está leyendo. El programa quiere realizar un
seek()
por alguna razón y luego falla. - Un programa (como denyhosts o fail2ban) quiere leer de un archivo de registro que syslog-ng ha creado como una canalización con nombre y en el que está escribiendo. El programa quiere realizar un
seek()
en él y falla.
Idealmente, me gustaría que estos se comporten como si la tubería con nombre fuera solo un archivo vacío. No puedo ver ninguna razón por la cual un programa que escribe un registro necesitaría realizar una búsqueda de todos modos, solo debe abrir el archivo para agregarlo y comenzar a escribir. Puedo ver por qué querría buscar una lectura de programa, para que pueda reanudar desde su última posición, y me gustaría que se comporte como si el archivo estuviera vacío (como si hubiera sido truncado).
Entonces, ¿hay alguna opción que se pueda establecer en canalizaciones con nombre para que se comporten de esta manera? Si no, ¿hay un modo que se puede configurar cuando syslog-ng abre la tubería para que se comporte de esta manera (estoy abierto a hacer cambios en el código)? ¿O estoy en un arroyo?
F
comando en menos, sería suficiente con menos para actualizar la pantalla si no obtiene ningún resultado durante un segundo más o menos. Hacer que las tuberías se puedan buscar no ayudaría: la diferencia relevante es queF
va al final del archivo, luego espera a que los datos aparezcan más allá del final, pero para una tubería, el final del archivo solo llega cuando el escritor cierra el archivo.Si la aplicación está llamando a buscar, está rota o no está pensada para funcionar en tuberías. Si es lo primero, entonces necesita ser reparado. Si es lo último, entonces espera que la búsqueda realmente funcione, por lo que mentir y afirmar que funcionó cuando no lo hizo seguramente causará una operación incorrecta.
Además, si el archivo de registro se reemplaza por una tubería con nombre, solo un proceso podría leerlo a la vez. Debería ser un zócalo en su lugar.
fuente