On Tue, 2009-11-03 at 13:31 -0800, Donald Russell wrote:
Another system uses FTP to drop files in a directory for me to process. I have a bash script to process the incoming files. The script is started by cron periodically.
There's a problem if the FTP transfer is still in progress because the process begins reading the file even though it isn't complete yet.
From a bash script, is there a way to tell if the file is still being written to? I was looking at the lsof command, which will tell me if the file is opened or not, so that's a possibility... but it sure seems awkward for the task.
Not really. Since you know that the ftp demon is the only potential writer for the file, you can use
lsof -p <demon-pid> | grep <filename>
I could also configure the ftp server to lock files being written, but that seems to be discouraged. (based on man vsftpd.conf)
inotify(7) could do the job, but would require some programming.
poc