Я предлагаю вам запускать ваш скрипт, используя cron
один раз в день. Пн-Пт.
Тогда ваш скрипт будет иметь начальный тест и завершится, если тест не пройден.будет (псевдокод):
if ( isWeekend( today ) ) {
exit;
} elsif ( public_holiday( today ) ) {
exit;
}
for ( day_of_month = 1; day_of_month < today; day_of_month++ ) {
next if ( isWeekend( day_of_month ) );
if ( ! public_holiday( day_of_month ) ) {
# a valid day earlier in the month wasn't a public holiday
# thus this script MUST have successfully run, so exit
exit;
}
}
# run script, because today is NOT the weekend, NOT a public holiday, and
# no possible valid days for running exist earlier in this month
1;
Например, функция isWeekend
может выглядеть в Perl следующим образом:
sub isWeekend {
my ( $epoch_time ) = @_;
my $day_of_week = ( localtime( $epoch_time ) )[6];
return( 1 ) if ( $day_of_week == 0 ); # Sunday
return( 1 ) if ( $day_of_week == 6 ); # Saturday
return( 0 );
}
Вы должны написать свой собственный public_holiday
функция для возврата значения истинности в зависимости от того, была ли дата выходным днем в вашем конкретном штате / стране.