#!/usr/bin/perl -w use strict; # # Set this script up as a cron job to have notification email sent when a # domain is expiring. See the expires.lst file for the list of domains. # NOTE: .edu domains are NOT supported at this time. # # You can also run it at the command line with the -v flag to see a list of # all domains and the expiration dates. # # Set the filename for the list of domains to be checked my $file = "expire.lst"; use Net::Domain::ExpireDate; use Time::Piece; use Time::Seconds; use Getopt::Std; use vars '%opts', '@expiration_list', ; getopts('v', \%opts); # Expand tilde $file =~ s{ ^ ~ ( [^/]* ) } { $1 ? (getpwnam($1))[7] : ( $ENV{HOME} || $ENV{LOGDIR} || (getpwuid($>))[7] ) }ex; open (FILE, "<$file") or die "Unable to open $file: $!"; my @domains = ; close FILE; my $today = localtime; foreach my $line (@domains) { chomp $line; next unless defined $line && $line && $line !~ /^#/; my ($domain, @days) = split(/ /, $line); my $date = expire_date($domain); my $expire_secs = $date - $today; my $expire_days = sprintf("%d", $expire_secs->days); print "---------------\nDomain = $domain\nExpiration = " . $date->strftime('%Y-%m-%d') . "\nExpires (days) = $expire_days\n" if $opts{'v'}; LINE: foreach my $look_ahead (@days) { if ($expire_days == $look_ahead) { push @expiration_list, "$domain $expire_days"; last LINE; } } } # Now print the list of expiring domains print "\n\n=======================\n" if $opts{'v'}; foreach my $line (@expiration_list) { my ($domain, $expire_days) = split(/ /, $line); print "Domain '$domain' is expiring in $expire_days days.\n"; } #### # This is the data file for the expire.pl script. The domain name should # exclude www or other subdomain values. A reminder email will be sent on each # of the days following the domain name. # Format of this file: # perlmonks.org 30 15 7 mywebsite.com 45 30 15 7