Как запустить скрипт в 1-й рабочий день каждого месяца? - PullRequest
4 голосов
/ 27 сентября 2010

Я должен запускать сценарий в 1-й рабочий день каждого месяца.Подскажите, пожалуйста, как я могу это сделать на Perl.

Допустим, если его национальный праздник в этой стране, сценарий должен запускаться на 2-й рабочий день.У меня есть один двоичный файл, который дает мне вывод предыдущего рабочего дня, если его выходной для конкретной страны.

Ответы [ 2 ]

7 голосов
/ 27 сентября 2010

В пакете CPAN Date::Manip есть все, что нужно для поддержки такого рода вещей. «Date_NextWorkDay ()» может показаться вам наиболее подходящим.

7 голосов
/ 27 сентября 2010

Я предлагаю вам запускать ваш скрипт, используя 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функция для возврата значения истинности в зависимости от того, была ли дата выходным днем ​​в вашем конкретном штате / стране.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...