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
signature.asc
Description: Digital signature