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/