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

I would like to know if there are any batch processing systems written in Perl. The machines will not share a common disk. Perl data and code must passable by some sort of network mechanism (ie, TCP/IP).

Replies are listed 'Best First'.
RE: TCP/IP processing systems
by Odud (Pilgrim) on Jun 13, 2000 at 23:39 UTC
    If writing it yourself you would need to be very careful with error handling and recovery. At our site we use a expensive commercial product (not written Perl!). Most of the problems arise when servers "drop out" either because of server faults or network faults. The recovery (i.e. working out where each server is up to with the schedule, what has failed, what has finished) is the area that gives us the most problems.

    The basic principle is that one machine is the master. It organises the others and gives them a schedule of what they need to run. When a machine needs to find out the status of a job on another it asks the master. There is a fairly high network load as all the agents are in communication with the master and vice versa. If the master fails then one of the agents can become a new master, for short failures then the agents can run independently and then catch up with the master when it again becomes available.

    I'm sure this is very do-able in Perl and I'm not trying to put you off - it is just that you need to have an idea of the magnitude of the task before you start.

    Having said all that if we are running thousands of jobs across >100 machines each night - if you just want to write a better cron replacement with a central console I don't think it would be impossible.

    It might be worth searching to see if someone has anything written in C that wouldn't be too hard to port.
Re: TCP/IP processing systems
by btrott (Parson) on Jun 13, 2000 at 22:04 UTC
    Perhaps you could use some sort of RPC? Check out Bundle::PlRPC. I believe RPC::PlServer (in this distribution) is what DBI::ProxyServer uses.

    Or you could write your own client-server system using sockets. Check out perlipc. You'll want sockets if you're going to be running this on different machines.

Re: TCP/IP processing systems
by chromatic (Archbishop) on Jun 13, 2000 at 22:00 UTC
    I'm not aware of any systems like that, but if you use a method like Data::Dumper or Serialize or even Class::Tom, you could probably write a quick transporter yourself.
RE: TCP/IP processing systems
by BigJoe (Curate) on Jun 13, 2000 at 23:46 UTC
    Have you thaught about using the telnet module? Using this from a machine you can log into other (*nix)machines and run other scripts that are already on the machines.

    Try Net::Telnet

    --Joe