'; my ($sm) = @_; my $seconds = 0; my $elapsed = 0; my $randstart = '00'; if ($sm eq '') { if ( $main::opt_test ) { print "mm hh dom mon dow = sm2cron_time($sm);\n"; }; return ($cron, $seconds); }; # Convert sendmail time # 1w2d3h4m5s # to cron time # m h dom mon dow $t = $sm; if ( $t =~ /^\d+$/ ) { $minute = $sm; } else { ($week = $sm) =~ s/.*?(\d+)w.*/$1/ if ( $t =~ /w/ ); ($day = $sm) =~ s/.*?(\d+)d.*/$1/ if ( $t =~ /d/ ); ($hour = $sm) =~ s/.*?(\d+)h.*/$1/ if ( $t =~ /h/ ); ($minute = $sm) =~ s/.*?(\d+)m.*/$1/ if ( $t =~ /m/ ); ($second = $sm) =~ s/.*?(\d+)s.*/$1/ if ( $t =~ /s/ ); } # Rationalize the time $seconds = ($week * 7 * 24 * 60 * 60) + ($day * 24 * 60 * 60) + ($hour * 60 * 60) + ($minute * 60) + $second; $elapsed = $seconds; $month = $seconds / (4 * 7 * 24 * 60 * 60); $seconds = $seconds % (4 * 7 * 24 * 60 * 60); $week = $seconds / (7 * 24 * 60 * 60); $seconds = $seconds % (7 * 24 * 60 * 60); $day = $seconds / (24 * 60 * 60); $seconds = $seconds % (24 * 60 * 60); $hour = $seconds / (60 * 60); $seconds = $seconds % (60 * 60); $minute = $seconds / (60); $seconds = $seconds % (60); $second = $seconds; # Cron doesn't do seconds, round to minutes or ignore $minute = $minute + 1 if ($second > 30); # Minute of hour (0-59) $minute = sprintf("%02d", $minute); $randstart = sprintf("%02d", int(rand(60))) if (!$main::opt_static); if (0 < $hour + $day + $week + $month) { if (1 >= $minute) { $cron = "$randstart "; } else { $cron = "$minute "; } } elsif (1 >= $minute) { $cron = "* "; } else { $cron = "*/$minute"; }; # Hour of day (0-23) $hour = sprintf("%02d", $hour); $randstart = sprintf("%02d", int(rand(24))) if (!$main::opt_static); if (0 < $day + $week + $month) { if (1 >= $hour) { $cron = "$cron $randstart "; } else { $cron = "$cron $hour "; } } elsif (1 >= $hour) { $cron = "$cron * "; } else { $cron = "$cron */$hour"; }; # Day of month (1-31) $day = $day + (7 * $week); $day = sprintf("%02d", $day); $randstart = 1 + sprintf("%02d", int(rand(31))) if (!$main::opt_static); if (0 < $month) { if (1 >= $day) { $cron = "$cron $randstart "; } else { $cron = "$cron $day "; } } elsif (1 >= $day) { $cron = "$cron * "; } else { $cron = "$cron */$day"; }; # Month in year (1-12) $month = sprintf("%02d", $month); $randstart = 1 + sprintf("%02d", int(rand(12))) if (!$main::opt_static); if (1 >= $month) { $cron = "$cron * "; } else { $cron = "$cron */$month"; }; $cron = "$cron *"; # Day of week (0-7) if ( $main::opt_test ) { print "$cron = sm2cron_time($sm);\n"; }; return ($cron, $elapsed); }; #