Man Linux: Main Page and Category List

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).