On Fri, Sep 12, 2003 at 08:51:46AM -0500, Jay Strauss wrote:
> Hi,
> 
> I'm trying to build a pgm that will launch and stop a bunch of my programs
> on some schedule.  Sorta like cron, but all I'd have to do is start this one
> program and it would do all the work of starting and stopping the rest of
> the programs.  Maybe you could call it a job parent.
> 
> I need to stop then immediately start one of the programs every hour.  So in
> effect, this parent job is kind of like a janitor stopping and starting this
> other program once and hour.

So far you can do this through cron without running a second management
program.  If your program drops a PID file somewhere, it can be used as
a handle to stop and start it.

  #!/bin/sh
  /bin/kill -HUP `/bin/cat /var/run/thingy.pid`
  sleep 1
  /usr/local/bin/thingy

That would run nicely out of cron.

> I figure I will have other child programs that need to be started and
> stopped on their own schedule.
> 
> The only way I can think of doing it with POE, is by having a inline state
> for each start and stop of each child program, so that I can schedule them
> independently.  Seems very inflexible.  I was hoping someone could point me
> in a better direction

It would be better to load the schedule at once and set alarms for the
next activity of each program.

  while (<SCHEDULE>) {
    chomp;
    my ($period, $program, $args) = split;  # hypothetically
    my ($start_or_stop, $next_time) = some_calculations($periord);
    $kernel->alarm(do_thing => $start_or_stop, $next_time, $period, $program, $args);
  }

The "start_thing" handler would pull off the parameters and start your
program:

  sub handle_start_thing {
    my ($start_or_stop, $period, $program, $args) = @_[ARG0, $#_];

    if ($start_or_stop eq "start") {
      # ... start the program here ...
    }
    else {
      # ... stop the program here ...
    }

    # Figure out what to do next.
    my ($start_or_stop, $next_time) = some_calculations($period);
    $kernel->alarm(do_thing => $start_or_stop, $next_time, $period, $program, $args);
  }

Consider this pseudo-code.  It deliberately ignores a lot of details,
like what some_calculations() does, or how you tell whether to start or
stop a program.

Good luck.

-- 
Rocco Caputo - [EMAIL PROTECTED] - http://poe.perl.org/

Reply via email to