Existe alguma maneira de fazê-lo para que, quando os programas tentem executar seek()
operações em um pipe nomeado, ele volte com êxito (mas aja como se o pipe fosse um arquivo vazio) em vez de 'Busca ilegal'?
Tenho todo o último logon do meu sistema armazenado em um banco de dados SQLite, não tenho arquivos em lugar nenhum. No entanto, existem alguns programas que têm problemas com isso. Existem 2 casos específicos;
- Um programa deseja gravar em um arquivo de log que o syslog-ng criou como um pipe nomeado e está lendo. O programa deseja executar um
seek()
por algum motivo e depois falha. - Um programa (como denyhosts ou fail2ban) deseja ler de um arquivo de log que o syslog-ng criou como um pipe nomeado e está gravando. O programa quer executar um
seek()
e falhar.
Idealmente, eu gostaria que essas buscas se comportassem como se o pipe nomeado fosse apenas um arquivo vazio. Não vejo nenhuma razão para que um programa que esteja escrevendo um log precise executar uma busca de qualquer maneira, ele deve apenas abrir o arquivo para anexar e começar a escrever. Eu posso ver por que uma leitura de programa gostaria de procurar, para que pudesse retomar de sua última posição, e gostaria que ele se comportasse como se o arquivo estivesse vazio (como se tivesse sido truncado).
Então, existe alguma opção que pode ser definida em pipes nomeados para que eles se comportem dessa maneira? Caso contrário, existe um modo que pode ser definido quando o syslog-ng abre o canal para que ele se comporte dessa maneira (estou aberto a fazer alterações no código)? Ou eu estou subindo um riacho?
F
comando em menos, seria suficiente que menos atualizasse a tela se ela não obtiver nenhuma saída por um segundo ou mais. Tornar os tubos procuráveis não ajudaria: a diferença relevante existeF
no final do arquivo e aguarda a exibição dos dados após o final - mas, no caso de um pipe, o fim do arquivo só ocorre quando o gravador fecha o arquivo.Se o aplicativo estiver chamando de busca, ele está quebrado ou não deve funcionar em tubulações. Se o primeiro, então ele precisa ser corrigido. Nesse último caso, espera que a busca realmente funcione; portanto, mentir e afirmar que funcionou quando não o fez quase certamente causará operação incorreta.
Além disso, se o arquivo de log for substituído por um pipe nomeado, somente um processo poderá ler a partir dele por vez. Deve ser um soquete.
fonte