Provided by: ncftp_3.2.5-2.1_amd64 bug

NAME

       ncftpspooler - Global batch FTP job processor daemon

SYNOPSIS

       ncftpspooler -d [options]

       ncftpspooler -l [options]

OPTIONS

   Command line flags:
       -d      Begin background processing of FTP jobs in the designated FTP job queue directory.

       -q XX   Use  this  option  to  specify  a  directory  to  use as the FTP job queue instead of the default
               directory, /var/spool/ncftp.

       -o XX   Use this option to specify a  filename  to  use  as  the  log  file.   By  default,  (and  rather
               inappropriately)  the  program  simply uses a file called log in the job queue directory.  If you
               don't want a log, use this option to specify /dev/null.

       -l      Lists the contents of the job queue directory.

       -s XX   When the job queue is empty, the program sleeps 120 seconds and then checks again to see if a new
               job has been submitted.  Use this option to change the number of seconds used for this delay.

DESCRIPTION

       The  ncftpspooler  program  evolved  from  the ncftpbatch program.  The ncftpbatch program was originally
       designed as a ``personal FTP spooler'' which would process a single background job a particular user  and
       exit  when  it  finished;  the  ncftpspooler  program is a ``global FTP spooler'' which stays running and
       processes background jobs as they are submitted.

       The job queue directory is monitored for specially-named and formatted text files.  Each file serves as a
       single  FTP  job.   The  name  of  the  job  file  contains the type of FTP job (get or put), a timestamp
       indicating the earliest the job should be processed, and optionally some additional information  to  make
       it  easier  to  create  unique  job  files  (i.e. a sequence number).  The contents of the job files have
       information such as the remote server machine to FTP to, username, password, remote pathname, etc.

       Your job queue directory must be readable and writable by the user that you plan to run ncftpspooler  as,
       so that jobs can be removed or renamed within the queue.

       More  importantly, the user that is running the program will need adequate privileges to access the local
       files that are involved in the FTPing.  I.e., if your spooler is going to be processing jobs which upload
       files to remote servers, then the user will need read permission on the local files that will be uploaded
       (and directory access permission the parent directories).  Likewise, if  your  spooler  is  going  to  be
       processing  jobs  which  download  files,  then  the  user  would  need  to be able to write to the local
       directories.

       Once you have created your spool directory with appropriate  permissions  and  ownerships,  you  can  run
       ncftpspooler -d  to  launch  the  spooler daemon.  You can run additional spoolers if you want to process
       more than FTP job from the same job queue directory simultaneously.  You can then monitor  the  log  file
       (i.e.,  using  tail -f  )  to  track  the  progress  of  the spooler.  Most of the time it won't be doing
       anything, unless job files have appeared in the job queue directory.

JOB FILE NAMES

       When the ncftpspooler program monitors the job queue directory, it ignores any files that do  not  follow
       the  naming  convention for job files.  The job files must be prefixed in the format of X-YYYYMMDD-hhmmss
       where X denotes a job type, YYYY is the four-digit year, MM is the two-digit month number, DD is the two-
       digit  day  of the month, hh is the two-digit hour of the day (00-23), mm is the two-digit minute, and ss
       is the two-digit second.  The date and time represent the earliest time you want the job to be run.

       The job type can be g for a get (download from remote host), or p for  aput (upload to remote host).

       As an example, if you wanted to schedule an upload to occur at 11:45 PM on December 7, 2001, a  job  file
       could be named

           p-20011207-234500

       In  practice, the job files include additional information such as a sequence number or process ID.  This
       makes it easier to create unique job file names.  Here is the same example,  with  a  process  ID  and  a
       sequence number:

           p-20011207-234500-1234-2

       When  submitting job files to the queue directory, be sure to use a dash character after the hhmmss field
       if you choose to append any additional data to the job file name.

JOB FILE CONTENTS

       Job files are ordinary text files, so that they can be created by hand.  Each line of the file is a  key-
       pair in the format variable=value, or is a comment line beginning with an octothorpe character (#), or is
       a blank line.  Here is an example job file:

           # This is a NcFTP spool file entry.
           job-name=g-20011016-100656-008299-1
           op=get
           hostname=ftp.freebsd.org
           xtype=I
           passive=1
           remote-dir=pub/FreeBSD
           local-dir=/tmp
           remote-file=README.TXT
           local-file=readme.txt

       Job files are flexible since they follow an easy-to-use format and do not  have  many  requirements,  but
       there are a few mandatory parameters that must appear for the spooler to be able to process the job.

       op      The operation (job type) to perform.  Valid values are get and put.

       hostname
               The remote host to FTP to.  This may be an IP address or a DNS name (i.e.  ftp.example.com).

       For a regular get job, these parameters are required:

       remote-file
               The pathname of the file to download from the remote server.

       local-file
               The pathname to use on the local server for the downloaded file.

       For a regular put job, these parameters are required:

       local-file
               The pathname of the file to upload to the remote server.

       remote-file
               The pathname to use on the remote server for the uploaded file.

       For a recursive get job, these parameters are required:

       remote-file
               The pathname of the file or directory to download from the remote server.

       local-dir
               The directory pathname to use on the local server to contain the downloaded items.

       For a recursive put job, these parameters are required:

       local-file
               The pathname of the file or directory to upload to the remote server.

       remote-dir
               The directory pathname to use on the remote server to contain the uploaded items.

       The  rest  of the parameters are optional.  The spooler will attempt to use reasonable defaults for these
       parameters if necessary.

       user    The username to use to login to the remote server.  Defaults to ``anonymous'' for guest access.

       pass    The password to use in conjunction with the username to login to the remote server.

       acct    The account to use in conjunction with the username to login to the remote server.  The  need  to
               specify this parameter is extremely rare.

       port    The  port  number to use in conjunction with the remote hostname to connect to the remote server.
               Defaults to the standard FTP port number, 21.

       host-ip The IP address to use in conjunction with the remote hostname to connect to  the  remote  server.
               This parameter can be used in place of the hostname parameter, but one or the other must be used.
               This  parameter  is  commonly  included  along  with  the  hostname  parameter  as   supplemental
               information.

       xtype   The  transfer  type  to  use.  Defaults to binary transfer type (TYPE I).  Valid values are I for
               binary, A for ASCII text.

       passive Whether to use FTP passive data connections (PASV) or FTP active data connections (PORT).   Valid
               values  are  0  for  active,  1  for  passive, or 2 to try passive, then fallback to active.  The
               default is 2.

       recursive
               This can be used to transfer  entire  directory  trees.   By  default,  only  a  single  file  is
               transferred.  Valid values are yes or no.

       delete  This  can be used to delete the source file on the source machine after successfully transferring
               the file to the destination machine.  By default, source files are not deleted.  Valid values are
               yes or no.

       job-name
               This  isn't  used  by the program, but can be used by an entity which is automatically generating
               job files.  As an example, when using the -bbb flag with ncftpput,  it  creates  a  job  file  on
               stdout  with a job-name parameter so you can easily copy the file to the job queue directory with
               the suggested job name as the job file name.

       pre-ftp-command

       post-ftp-command
               These parameters correspond to the -W, and -Y options of ncftpget and ncftpput.  It is  important
               to  note  that  these refer to RFC959 File Transfer Protocol commands and not shell commands, nor
               commands used from within /usr/bin/ftp or ncftp.

       pre-shell-command

       post-shell-command
               These parameters provide hooks so you can run a custom program when an item is processed  by  the
               spooler.  Valid values are pathnames to scripts or executable programs.  Note that the value must
               not contain any command-line arguments -- if you want to do that, create a shell script and  have
               it run your program with the command-line arguments it requires.

       Generally  speaking,  post-shell-command  is much more useful than pre-shell-command since if you need to
       use these options you're more likely to want to do something after the FTP transfer has completed  rather
       than  before.   For  example, you might want to run a shell script which pages an administrator to notify
       her that her 37 gigabyte file download has completed.

       When your custom program is run, it receives on standard input the contents of the job file (i.e. several
       lines  of variable=value key-pairs), as well as additional data the spooler may provide, such as a result
       key-pair with a textual description of the job's completion status.

       post-shell-command update a log file named /var/log/ncftp_spooler.

           #!/usr/bin/perl -w

           my ($line);
           my (%params) = ();

           while (defined($line = <STDIN>)) {
                $params{$1} = $2
                     if ($line =~ /^([^=\#\s]+)=(.*)/);
           }

           if ((defined($params{"result"})) &&
             ($params{"result"} =~ /^Succeeded/))
           {
                open(LOG, ">> /var/log/ncftp_spooler.log")
                     or exit(1);
                print LOG "DOWNLOAD" if ($params{"op"} eq "get");
                print LOG "UPLOAD" if ($params{"op"} eq "put");
                print LOG " ", $params{"local-file"}, "\n";
                close(LOG);
           }

DIAGNOSTICS

       The log file should be examined to determine if any ncftpspooler processes are actively working on  jobs.
       The  log  contains  copious  amounts  of  useful information, including the entire FTP control connection
       conversation between the FTP client and server.

BUGS

       The recursive option may not be reliable since ncftpspooler depends on functionality which may or may not
       be  present  in  the  remote  server  software.   Additionally,  even  if the functionality is available,
       ncftpspooler may need to use heuristics which cannot be considered 100% accurate.  Therefore it  is  best
       to  create  individual jobs for each file in the directory tree, rather than a single recursive directory
       job.

       For resumption of downloads to work, the remote server must support the FTP  SIZE  and  MDTM  primitives.
       Most  modern  FTP  server  software  can  do  this,  but  there  are  still  a  number of bare-bones ftpd
       implementations which do not.  In these cases, ncftpspooler will re-download the file  in  entirety  each
       time until the download succeeds.

       The  program  needs  to  be  improved to detect jobs that have no chance of ever completing successfully.
       There are still a number of cases where jobs can get spooled but get retried over and over again until  a
       vigilant sysadmin manually removes the jobs.

       The  spool  files  may  contain  usernames  and passwords stored in cleartext.  These files should not be
       readable by any user except the user running the program!

AUTHOR

       Mike Gleason, NcFTP Software (http://www.ncftp.com).

SEE ALSO

       ncftpbatch(1), ncftp(1), ncftpput(1), ncftpget(1), uucp(1).