Я предлагаю вам запустить ваш скрипт, используя 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
функцию вернуть значение истины в зависимости от того, была ли дата государственным праздником в вашем конкретном государстве/стране.
можете ли вы расширить «выход предыдущего рабочего дня»? что он дает, если это не праздник? – ysth
Сегодняшняя дата и вывод будут «101001» i.e.yearmonthdate, если я запускаю 1-й октябрь – user363638
Не могли бы вы расширить «в этой стране»? Какие страны вас интересуют? – dolmen