Gibt es eine Möglichkeit, um sicherzustellen, dass Programme, die versuchen, seek()
Operationen an einer Named Pipe auszuführen, erfolgreich zurückkehren (aber so tun, als ob die Pipe eine leere Datei wäre), anstatt 'Illegal seek'?
Ich habe auf meinem System jedes noch so kleine Protokoll in einer SQLite-Datenbank gespeichert, ich habe nirgendwo Dateien. Es gibt jedoch einige Programme, die Probleme damit haben. Es gibt 2 spezielle Fälle;
- Ein Programm möchte in eine Protokolldatei schreiben, die syslog-ng als Named Pipe erstellt hat und aus der es liest. Das Programm möchte
seek()
aus irgendeinem Grund eine ausführen und schlägt dann fehl. - Ein Programm (wie denyhosts oder fail2ban) möchte aus einer Protokolldatei lesen, die syslog-ng als Named Pipe erstellt hat und in die geschrieben wird. Das Programm möchte einen ausführen
seek()
und schlägt fehl.
Idealerweise möchte ich, dass sich diese Suchanfragen so verhalten, als ob die Named Pipe nur eine leere Datei wäre. Ich kann keinen Grund erkennen, warum ein Programm, das ein Protokoll schreibt, ohnehin eine Suche durchführen müsste. Es sollte nur die Datei zum Anhängen öffnen und mit dem Schreiben beginnen. Ich kann sehen, warum ein Programm das Lesen suchen möchte, damit es von seiner letzten Position aus fortgesetzt werden kann, und ich möchte, dass es sich so verhält, als ob die Datei leer wäre (als ob sie abgeschnitten worden wäre).
Gibt es also eine Option, die für Named Pipes festgelegt werden kann, damit sie sich so verhalten? Wenn nicht, gibt es einen Modus, der eingestellt werden kann, wenn syslog-ng die Pipe öffnet, damit sich diese so verhält (ich bin offen für Codeänderungen)? Oder bin ich einen Bach hoch?