tag - LINUX: cómo detectar que se ha terminado la carga del archivo ftp
puddletag (5)
En mi proyecto tengo una función para subir archivos. Los archivos se cargan a través de FTP. Necesito configurar una escucha que compruebe si hay nuevos archivos e invoque una secuencia de comandos solo cuando finalice la carga del archivo. Porque si ejecuto este script inmediatamente después de detectar el nuevo archivo, puede comenzar a procesar el archivo que no está completamente cargado, lo que causará un error. ¿Alguien puede decir si esto es posible en LINUX y cómo puedo hacer esto?
Apache "Mina" ftp server (java) podría hacer lo que quiera, incluida la detección de una carga fallida, como se menciona here
Citar:
Desde Ftplet.afterCommand, debería poder ver la respuesta. Para aquellas transferencias fallidas que FtpServer puede detectar (que causa una SocketException o IOException), esto debería ser algo así como 426 o 551.
Visión general de Ftplet here , incluidos los códigos de respuesta.
La firma del método afterCommand:
FtpletResult afterCommand(FtpSession session, FtpRequest request, FtpReply reply)
Verificará reply.getCode()
en su método reply.getCode()
. Debe subclasificar DefaultFtplet
lugar de implementar la interfaz Ftplet
desde cero.
Tenga en cuenta que DefaultFtplet::afterCommand
muestra cómo detectar a qué comando del cliente se está respondiendo. Puede verificar STOR
o STOU
y el código de respuesta 426
o 551
para detectar subidas fallidas.
Sin embargo, esto puede no detectar una carga terminada intencionalmente por el cliente, si la aplicación cliente decide tratar la transferencia como si el archivo fuera más corto de lo que es. En el caso de una conexión interrumpida involuntariamente, creo que la verificación del código de respuesta funcionará. Una prueba podría ser matar la aplicación cliente o desactivar la interfaz de red de la máquina cliente.
Para manejar las subidas exitosas (su pregunta original), puede buscar el código de respuesta exitoso en su lugar, es decir, 226
.
Echa un vistazo a inotify
Sin embargo, no vigila automáticamente los subdirectorios, por lo que si necesita monitorear muchas cuentas ftp (o el cliente de FTP quiere crear un subdirectorio y cargarlo allí), deberá manejarlo usted mismo.
Estaba buscando lo mismo y me topé con pureftpd que tiene una función de script de carga. Suena como exactamente lo que se necesitaba. Encuentre los detalles aquí: http://www.linuxbyexamples.net/2012/10/config-ftp-server-trigger-upload-file-to-call-external-script.html
He usado la característica HiddenStores de Proftpd. Mantiene los archivos en tránsito ocultos prefijándolos con un archivo .in.filename.ext hasta que hayan terminado de cargarse. Su proceso puede enumerar de forma segura los directorios de los archivos completados.
http://www.proftpd.org/docs/directives/linked/config_ref_HiddenStores.html
Intentaría usar inotify , código de evento IN_CLOSE_WRITE.