Existe-t-il un moyen de faire en sorte que lorsque les programmes tentent d'effectuer des seek()
opérations sur un canal nommé, il reviendra avec succès (mais agira comme si le canal était un fichier vide) au lieu de «Recherche illégale»?
J'ai tous les derniers morceaux de connexion sur mon système stockés dans une base de données SQLite, je n'ai aucun fichier nulle part. Cependant, il existe quelques programmes qui ont des problèmes avec cela. Il y a 2 cas spécifiques;
- Un programme veut écrire dans un fichier journal que syslog-ng a créé en tant que canal nommé et lit à partir de. Le programme veut effectuer un
seek()
pour une raison quelconque, puis échoue. - Un programme (tel que denyhosts ou fail2ban) souhaite lire à partir d'un fichier journal que syslog-ng a créé en tant que canal nommé et dans lequel il écrit. Le programme veut effectuer un
seek()
sur et échoue.
Idéalement, j'aimerais simplement que ces recherches se comportent comme si le canal nommé n'était qu'un fichier vide. Je ne vois aucune raison pour laquelle un programme écrivant un journal devrait de toute façon effectuer une recherche, il devrait simplement ouvrir le fichier pour l'ajouter et commencer à écrire. Je peux voir pourquoi une lecture de programme voudrait chercher, afin qu'elle puisse reprendre à partir de sa dernière position, et je voudrais donc qu'elle se comporte comme si le fichier était vide (comme s'il avait été tronqué).
Y a-t-il donc une option qui peut être définie sur les canaux nommés pour qu'ils se comportent de cette façon? Sinon, y a-t-il un mode qui peut être défini lorsque syslog-ng ouvre le canal pour qu'il se comporte de cette façon (je suis prêt à faire des changements de code)? Ou suis-je dans un ruisseau?
F
commande en moins, il suffirait de moins pour rafraîchir l'écran s'il n'obtient aucune sortie pendant une seconde environ. Rendre les pipes recherchables n'aiderait pas: la différence pertinente qui existeF
va à la fin du fichier, puis attend que les données apparaissent après la fin - mais pour une pipe, la fin du fichier ne survient que lorsque le rédacteur ferme le fichier.Si l'application appelle la recherche, elle est soit cassée, soit n'est pas destinée à fonctionner sur les tuyaux. Si le premier, alors il doit être corrigé. Si ce dernier, alors il s'attend à ce que la recherche fonctionne réellement, mentir et prétendre que cela a fonctionné alors qu'il ne l'a pas causé entraînera presque certainement un fonctionnement incorrect.
De plus, si le fichier journal est remplacé par un canal nommé, alors un seul processus peut le lire à la fois. Ce devrait être une prise à la place.
la source