如何在每个月的第一个工作日运行脚本?

use*_*638 4 unix perl

我必须在每个月的第一个工作日运行脚本.请建议我如何在Perl中完成它.

可以说,如果在该国的国定假日,脚本应该在第二个工作日运行.我有一个二进制文件,如果它是特定国家的假期,它会给我前一个工作日的输出.

PP.*_*PP. 7

我建议你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;
Run Code Online (Sandbox Code Playgroud)

例如,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 );
}
Run Code Online (Sandbox Code Playgroud)

您必须编写自己的public_holiday函数来返回真值,具体取决于日期是否是您所在州/国家/地区的公共假期.


Bea*_*ano 7

CPAN包Date::Manip有各种好东西来支持这类事情.'Date_NextWorkDay()'似乎最适合你.