#!/usr/bin/perl use warnings; use strict; my $start_time = time; my %dispatch; my %interval_of; while (<>) { my ($script, $interval) = split; $interval *= 60; push @{ $dispatch{ $start_time + $interval } }, $script; $interval_of{$script} = $interval; } while (1) { foreach my $time (keys %dispatch) { if (time >= $time) { for (@{ $dispatch{$time} }) { system "$_ &"; push @{ $dispatch{ $time + $interval_of{$_} } }, $_; } delete $dispatch{$time}; } } sleep 1; }