This script, when called from a cron job, will alert you to a server that's not available. You'll need to install both HTTP::Lite and Mail::Sendmail for the script to run as-is.
#! /usr/bin/perl
use strict;
use HTTP::Lite;
use Mail::Sendmail;
use POSIX qw(strftime);
my $http = new HTTP::Lite;
# Customize this line for your web site:
my $url = qq(http://www.domain.com/smallpage.html);
my $startTime=time;
my $success=1;
my $message;
# Change it to whatever you want:
$http->add_req_header('User-Agent', 'Server Tattler');
my $req = $http->request($url) or $success=0;
if ($success)
{
# Nothing, just go gently into that good night.
}
else
{
my $elapsedTime = time - $startTime;
my $sentTime = strftime("%A, %B %e %Y - %T", localtime($startTime));
# You can dispense with Mail::sendmail and just use Perl's built-in "print"
# for these messages if you want. If you set up your crontab properly,
# anything you "print" will get sent to you.
$message = qq(No server response after $elapsedTime second(s).\n);
$message .= qq(Attempting to reach url: $url\n);
$message .= qq(Began attempt at: $sentTime\n);
my %mail = ( To => 'Your Name ',
From => 'Server Tattler ',
Subject => 'Possible Server Failure',
Message => $message
);
sendmail(%mail) or print qq(Died at output to me $Mail::Sendmail::error\n);
}
Make the target page, here called smallpage.html, a really small page. On my server, it's a page that just sends back the IP address of the computer that doing the monitoring. It's just a single Apache include:
<--#echo var="REMOTE_ADDR"-->
Charlie Minow
February 9, 2020 - 5:09 PM MST