Czy można to zrobić tak, aby programy próbujące wykonywać seek()
operacje na nazwanym potoku powróciły pomyślnie (ale działały tak, jakby potok był pustym plikiem) zamiast „Nielegalne wyszukiwanie”?
Mam ostatnie logowanie do mojego systemu przechowywane w bazie danych SQLite, nigdzie nie mam plików. Jednak istnieje kilka programów, które mają z tym problem. Istnieją 2 konkretne przypadki;
- Program chce zapisać do pliku dziennika, który syslog-ng utworzył jako nazwany potok i odczytuje. Program chce wykonać z
seek()
jakiegoś powodu, a następnie nie powiedzie się. - Program (taki jak denyhosts lub fail2ban) chce czytać z pliku dziennika, który syslog-ng utworzył jako nazwany potok i do którego pisze. Program chce wykonać
seek()
na nim i kończy się niepowodzeniem.
Idealnie chciałbym, żeby te zachowywały się tak, jakby nazwany potok był tylko pustym plikiem. Nie widzę żadnego powodu, dla którego program piszący dziennik musiałby przeprowadzić wyszukiwanie, powinien po prostu otworzyć plik w celu dołączenia i rozpoczęcia pisania. Rozumiem, dlaczego czytający program chciałby szukać, aby mógł wznowić od swojej ostatniej pozycji, i dlatego chciałbym, aby zachowywał się tak, jakby plik był pusty (jakby został obcięty).
Czy istnieje jakaś opcja, którą można ustawić dla nazwanych potoków, aby zachowywały się w ten sposób? Jeśli nie, czy istnieje tryb, który można ustawić, gdy syslog-ng otwiera potok, aby zachowywał się w ten sposób (jestem otwarty na wprowadzanie zmian w kodzie)? A może jestem potokiem?
F
polecenia w mniej, wystarczy mniej, aby odświeżyć ekran, jeśli nie otrzyma żadnego wyjścia przez około sekundę. Sprawienie, by potoki były widoczne, nie pomogłoby: istotna różnica polega na tym, żeF
idzie na koniec pliku, a następnie czeka na pojawienie się danych za końcem - ale w przypadku potoku koniec pliku pojawia się dopiero po zamknięciu pliku przez program piszący.Jeśli aplikacja wywołuje funkcję seek, jest albo zepsuta, albo nie działa na potokach. Jeśli ten pierwszy, to wymaga naprawy. Jeśli to drugie, to oczekuje, że szukanie rzeczywiście zadziała, więc kłamanie i twierdzenie, że zadziałało, gdy nie, prawie na pewno spowoduje nieprawidłowe działanie.
Również jeśli plik dziennika zostanie zastąpiony nazwanym potokiem, tylko jeden proces może odczytać z niego jednocześnie. Zamiast tego powinno to być gniazdo.
źródło