#!/usr/bin/perl
# Creates /etc/cron.d file entries, one per month,
# for a program that should run on the previous
# day to last business day of the month.
# Uses Date::Manip::Date module, https://metacpan.org/dist/Date-Manip/view/lib/Date/Manip/Date.pod.
# 64board@gmail.com
# 2021-08-31
use strict;
use warnings;
use Date::Manip::Date;
sub cron_entry {
my ($date) = @_;
return $date->printf("30 19 %d %m %a\troot\t/opt/balmo_id/run.sh");
}
##MAIN##
my @months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
my $date = new Date::Manip::Date;
foreach my $month (@months) {
print "Month: $month\n";
# Get the last day of the month of current year.
$date->parse("last day in $month");
print 'Last day of the month: ', $date->printf('%Y-%m-%d, %a'), "\n";
# Don't check time for business day.
my $checktime = 0;
my $offset = 1;
# Case of last day of the month is not a business day.
if (!$date->is_business_day($checktime)) {
$offset = 2;
}
# The pevious day to last business day of the month.
$date->prev_business_day($offset, $checktime);
print 'Previous business day: ', $date->printf('%Y-%m-%d, %a'), "\n";
# The CRON entry, use CRON: label to filter the cron entries
# from the output.
print "CRON: ", cron_entry($date), "\n";
}
__END__
Tuesday, August 31, 2021
Perl Date::Manip::Date business day
Labels:
business,
cron.d,
Date::Manip::Date,
day,
Perl
Subscribe to:
Posts (Atom)