Le 12370ième jour après Epoch,
[EMAIL PROTECTED] écrivait:

> Le 14 nov. 03, à 17:56, Erwan David a écrit :
>>>>> En effet j'etais tombe sur une page man de BSD sur google.
>>>>> Je pense que le plus simple est que mon script ouvre le fichier
>>>>> mail.log en lecture continue ca sera plus simple.
>>>>
>>>> J'opterais plutôt pour la solution que quelqu'un t'a déjà
>>>> proposée: un
>>>> tube nommé et ton prog qui lit dedans, avec un select () pour ne pas
>>>> perdre de temps à boucler.
>>>
>>> Que est l'intérêt d'un select ? Un read est bloquant sur un pipe,
>>> si je
>>> ne m'abuse.
>>
>> Pour ne pas bloquer ?
>
> de toute facon j'ai fait un read bloquant en faisant un open sur un
> tail -f sur le fichier
> qui m'interesse, ca marche tres bien et j'ai un fork qui gere la
> distribution des stats calcules.
> Je vois pas l'interet de ne pas bloquer sur ce genre de truc.

Attention au tail -f ... Dans le cas d'une rotation de log, ça risque
de poser des problèmes.

L'utilisation de la syntaxe décrite dans le man de syslog.conf est
semble-t-il la meilleure:

   Named Pipes
       This version of syslogd(8) has support for  logging  output   to  named
       pipes  (fifos).   A fifo or named pipe can be used as a destination for
       log messages by prepending a pipe symbol (``|'') to  the  name  of  the
       file.  This is handy for debugging.  Note that the fifo must be created
       with the mkfifo(1) command  before syslogd(8) is started.


Tu fais un mkfifo sur /var/run/mail_log par exemple, puis tu dis à
syslogd: |/var/run/mail_log et tu fais ton read (bloquant ou pas,
c'est à toi de choisir) sur /var/run/mail_log ...

Attention, au reboot il se peut que /var/run soit effacé (je me
souviens plus, a toi de chercher), dans ce cas il faut refaire le tube
nommé.

PS: Le select() est intéressant à manipuler, car tu peux décider de
faire des reads au moment le plus opportun, et éventuellement de faire
d'autres choses (relecture de la config par ex.) en cas de réception
de certains signaux.

-- 
A good memory does not equal pale ink.

Répondre à