LiTinOveWeedle has asked for the wisdom of the Perl Monks concerning the following question:

Hi brothers,

I want to ask you for some idea how to made this:
I wrote some script which using Net::FTP to transfer file from dir to ftp site. So when script start it check folder if there any files for transfer, connect and login to tfp server and put files to it. Script is scheduled to be started each hour. Script can be also called from URL to give users chance to start transfer manually.
And now question:
1. If script was started by scheduler I want to forbid run it again - from user interface and vice versa. This should be done by some temporary file in which script can write if it allready running and check this file everytime when it start. - But if you have better idea.......

2. sometimes (in Europe very often :-) ) transfer failed. Is there any way how to watch if transfer is still alive and if not abort transfer, quit, login and start transfer again... I check documentation to Net::FTP, but didn't found anything which should help....

Thank you very much for answer.
Perl bless you and happy Easter.

Li Tin O've Weedle
mad Tsort's philosopher

Replies are listed 'Best First'.
Re: How control Net::FTP transfer
by Beatnik (Parson) on Apr 16, 2001 at 15:48 UTC
    You could actually have some kind of .lock file... utime it to avoid stale lockfiles... if the script runs, check for the .lock and bail out if its present.

    Greetz
    Beatnik
    ... Quidquid perl dictum sit, altum viditur.
(fongsaiyuk)Re: How control Net::FTP transfer
by fongsaiyuk (Pilgrim) on Apr 16, 2001 at 17:44 UTC
    I have to agree with Beatnik, I'd also recommend using a separate lock file that you'd use to control execution.

    But wait! Don't beat your head against the wall too hard trying to make such a thing work!

    See this over at CPAN: Lockfile::Simple

    It might be good enough for your purposes.

    Good luck! Net::FTP is a great module!

    fongsaiyuk

Re: How control Net::FTP transfer
by LiTinOveWeedle (Scribe) on Apr 16, 2001 at 20:45 UTC
    Oki bros,
    Now questions 1. is done. Thank you for your replies.
    But what about question 2.? We need method how to control if transfer is alive.... So maybe some transfer byte check.....

    Any idea? Thank you very much.

    Li Tin O've Weedle
    mad Tsort's philosopher

      I had a similar problem. When you create a Net::FTP object you can set a Timeout value. If the connection times out, you can trap the error and try to get the file again or re-login and start all over.

      I put the Net::FTP->get() call in an eval block so I could look at $@. If $@ contains something like "Timeout at ... FTP.pm' then I start all over again.

      I had special reasons for doing that (I needed to know if the server timed out or if there was some other error) but you could probably just do something like birdbrane does in his reply to my node. Net::FTP->get will return an error if it does not succeed.