diff options
| author | Paul Buetow <paul@buetow.org> | 2011-05-30 19:30:13 +0000 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2011-05-30 19:30:13 +0000 |
| commit | 7940ed0177b210526662c698cadef26913ba0ed6 (patch) | |
| tree | 4a2191523db0e1a0742f65665f16b1063877fc6f | |
| parent | b7189bab044a37877012846ef0b17b08032e7e89 (diff) | |
Time::HiRes job scheduling support
| -rw-r--r-- | CHANGELOG | 3 | ||||
| -rw-r--r-- | lib/PerlDaemon/PerlDaemon.pl | 18 |
2 files changed, 16 insertions, 5 deletions
@@ -1,4 +1,5 @@ -Mo 30. Mai 21:10:53 CEST 2011 +Mo 30. Mai 21:29:20 CEST 2011 +* Implemented Time::HiRes job scheduling * Added passing of startup options. E.g. ./control start daemon.daemonize=no daemon.loopinterval=10 starts perldaemon in foreground w/ a loopinterval of 10 seconds. diff --git a/lib/PerlDaemon/PerlDaemon.pl b/lib/PerlDaemon/PerlDaemon.pl index 58e9755..15c29a4 100644 --- a/lib/PerlDaemon/PerlDaemon.pl +++ b/lib/PerlDaemon/PerlDaemon.pl @@ -7,6 +7,7 @@ use warnings; use Shell qw(mv); use POSIX qw(setsid strftime); +use Time::HiRes qw(gettimeofday tv_interval); use PerlDaemon::Logger; use PerlDaemon::RunModules; @@ -148,10 +149,19 @@ sub daemonloop ($) { my $loopinterval = $conf->{'daemon.loopinterval'}; my $loop = shift; - for (my $i = 1;;++$i) { - $rmodule->do(); - sleep $loopinterval; - alive $conf; + my $lastrun = [0,0]; + + for (;;) { + my $now = [gettimeofday]; + my $timediff = tv_interval($lastrun, $now); + + if ($timediff >= $loopinterval) { + $lastrun = $now; + $rmodule->do(); + alive $conf; + } + + sleep $loopinterval / 10; } } |
