#!/usr/bin/perl # Author Art Reisman APconnections # This is GPL version 2 code # art@apconnections.net # Create a file with the standard cron syntax # Comments start with a # as the first character # Multiple lines are accepted as separate jobs # It takes formats with standard cron fields # Min hour dayofmonth month dayofweek program # you can use , for multiple entry and * for a field # 4,5,6,7,55,56,57,58,59,0,45,46 16,17 20,21 7 0 /cron/testcron sub builddb{ if (! defined $ARGV[0] ) { print "USAGE apccrond \n"; exit 1; } unless ( -e $ARGV[0] ) { print " can't find crontab file $ARGV[0] \n"; exit 1 } system ("cat $ARGV[0] | grep -v '^#' > /tmp/gocrontab"); open (APCCRONTAB, "/tmp/gocrontab") or die " I can't find /tmp/gocrontab \n"; @array = ; $len = scalar(@array); @minsarry, @hrssarray, @domarray, @monarray, @dowarray = (); foreach $m ( @array) { ($MINS, $HRS, $DOM, $MON, $DOW, $BIN, $FILE) = split (" ", $m); # print " min $MINS hrs $HRS dom $DOM mon $MON dow $DOW bin $BIN file $FILE \n"; push (@minsarray, $MINS); push (@hrssarray, $HRS); push (@domarray, $DOM); push (@monarray, $MON); push (@dowarray, $DOW); push (@binarray, $BIN); push (@filearray, $FILE); } close APCCRONTAB; } sub eval{ $counter = 0; for $m(0 .. ($len-1)) { # print "what $minsarray[$m] hrs $hrssarray[$m] dom $domarray[$m] dow $dowarray[$m] \n"; if (( compare_all ($minsarray[$m] , $min)) ) { if ((compare_all($hrssarray[$m] , $hour))) { if ((compare_all($domarray[$m] , $date)) ) { if ((compare_all($monarray[$m],$month)) ) { if ((compare_all($dowarray[$m] , $day)) ) { # print "ITs a match \n"; if($filearray[$m] =~ /\//) { (@path) = split(/\//, $filearray[$m]); $filename = pop(@path); $paths = join '/', @path; chdir ("$paths"); system("$binarray[$m] $filename"); } else{system("$binarray[$m] $filearray[$m]");} } } } } } } &checktime; } sub compare_all { my($vals,$val)=@_; # print "compare $vals $val \n"; if ($vals eq "*" ) {# print "found a * \n"; return 1 ; } else { #$print "$vals not a *\n"; } chomp $vals ; @foo=split(",",$vals); foreach $x ( @foo ) { if ($x == $val ) { #print "found a $x\n"; return 1; } else { } } return 0; } sub checktime{ while (1==1) { ($sec,$min,$hour,$date,$month,$year,$day,$yday,$isdst) = localtime(time); # print " min $min hr $hour date $date mn $month yr $year day $day \n"; $month=$month+1; sleep 5; if ( $min != $newmin) { $newmin=$min; &eval; } } } &builddb; $newmin=-1; &checktime;