[K12OSN] Way OT: scripting help
Les Mikesell
les at futuresource.com
Wed May 23 19:02:52 UTC 2007
Dimitri Yioulos wrote:
> Apologies if my description of what I'm after isn't clear above. I want to
> make sure our business partner had uploaded it's file to the ftp server, then
> transfer it, then make sure an exact copy actually did get transfered, then
> delete the file on the ftp server next day. Does the construct:
>
> while [ ! -e $FILENAME ]
This looks for the specified file in the current directory. If it does
not exist ( the ! negates the -e test) you fall into the loop. If the
file is there you'll skip past the 'done'. I assume the files have a
unique name or you've moved the previous one so the first time through
you will execute the loop.
> do
> rsync -essh othermachine:/path/$FILENAME . || sleep 900
This tries to copy the file to the current directory (.). If it fails
for any reason (the likely one being that the file doesn't exist yet) it
will wait 900 seconds (15 * 60). The || construct means 'or' and the
right side only happens if the left side fails.
> done
This loops back to the while test. When the file exists, you move on.
You don't have to worry about 'exact' copies. Rsync will use a tmp file
name during the transfer and only rename to the real name when the
transfer is complete and correct.
> wait 15 minutes if the file hasn't been uploaded to the ftp server, then do
> the tranfer, otherwise do the transfer (doesn't look like it does)? How
> would I then repeat the rsync to test that the transfer actually happened
> and, if not (for whatever reason), try the transfer again. Now, I hope I'm
> not pushing the lists good nature, but how might I log that the transfer took
> place successfully (doesn't matter whether it on the ftp server or the file
> server that it's being transferred to)?
Unless you go out of your way to avoid it, cron will send email with the
output of the script to the user that set up the job. If you don't mind
some uglyness, just add a -v to the rsync command and make sure email
works. You could also explicitly log it with something like
echo "$FILENAME arrived at $(date)" >>/path/to/logfile
after the done. The ftp xferlog on the ftp server will also show when
it arrived there.
--
Les Mikesell
lesmikesell at gmail.com
More information about the K12OSN
mailing list