On Fri, Aug 24, 2007 at 10:33:27AM -0300, Maxi wrote:
> Hola gente,
> 
> Tengo un script[1] muy simple, que me trae un problema y no veo como
> mejorarlo....
> El script debe copiar archivos de un path a otro.
> El script esta en el cron, y cada 20 minutos se ejecuta.
> En el path original constanemente se escriben archivos, y el problema
> es que hay momentos que se estan escribiendo archivos y el script
> entra en funcionamiento, lo que ocurre es que el archivo que estaba
> abierto se copia mal.
> 
> ¿En el script, como puedo consultar y no copiar si el archivo origen
> esta abierto o esta siendo utilizado?

La respuesta corta es 'no puedes'.

La respuesta larga es que podrías, en principio, usar algo como
lsof. Pero en realidad no te sirve, por que estas creando una
condición de carrera. Puede pasar que hagas la prueba, veas que el
archivo no está abierto, empieces a copiarlo, y *entonces* lo abran.
A menos que el programa que escribe a los archivos nunca los vuelva a
abrir cuando termina.

La solución general es usar un bloqueo. Lo que debería pasar es que
todos los programas que pueden llegar a usar los archivos deben usar
algo que les indique a los demás "estoy usando éste, no se metan".
Investiga por ejemplo el uso de dotlockfile, que viene en el paquete
liblockfile1

Attachment: signature.asc
Description: Digital signature

Responder a