guarda.. non avendo trovato niente e preferendo anche farlo girare 24/24 (ad intervalli ma cmq 24/24) me lo son fatto in php e me lo son messo in crontab....
ti incollo il codice anche se è solo una bozza (ma funziona per quel che serve a me)... quando lo migliorerò un po' lo metterò scaricabile sul mio sito assieme ad altre millemila fesserie del gnere 
codice:
<?php
###################
# CONFIGURAZIONI #
###################
$url2check = 'http://www.guidoz.it/index.php';
$baseurl = 'http://www.guidoz.it/';
$mailfrom = "Guido <guidoz@email.it>";
$mailto = 'guidoz@email.it';
$local_model = 'model';
###################
# NON MODIFICARE #
###################
//funzione che rende assoluti i path relativi dei file
//da rivedere e migliorare
//http://forum.html.it/forum/showthread.php?postid=8715346
function rel2abs($html,$base)
{
$regexp = '/(src=(\'|")(.*)(\'|"))/';
$replace = "src=$2$base$3$4";
$html = preg_replace($regexp, $replace, $html);
$regexp = '/(href=(\'|")([^http].*)(\'|"))/';
$replace = "href=$2$base$3$4";
$html = preg_replace($regexp, $replace, $html);
return $html;
}
//leggo file remoto
if (!($remote = @file($url2check)))
{
echo "Impossibile trovare il file remoto";
exit;
}
$remote = implode('',$remote);
//la prima volta che viene lanciato lo script non esiste il file modello
//quindi lo creo identico al file remoto
if (!file_exists($local_model))
{
$fh = fopen($local_model,'w');
fwrite($fh,$remote);
fclose($fh);
}
//leggo il file modello
$local = file($local_model);
$local = implode('',$local);
//confronto la pagina remota con il modello locale
if ($remote===$local)
{
echo "La pagina non è cambiata";
}
else
{
echo "la pagina è cambiata";
//preparo la mail con tutti gli header
$mail_header = "From: $mailfrom\n";
$mail_boundary = "==String_Boundary_x" .md5(time()). "x";
$mail_header .= "MIME-Version: 1.0\n";
$mail_header .="Content-Type: multipart/alternative;\n boundary=\"$mail_boundary\";\n\n";
$mail_text = "Il tuo client non supporta i MIME\n\n";
//mail in testo piano
$mail_text .= "--$mail_boundary\n";
$mail_text .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
$mail_text .= "Content-Transfer-Encoding: 7bit\n\n";
$mail_text .= "La pagina $url2check risulta essere cambiata rispetto al modello corrente.\nQuesto è il suo contenuto in testo piano:\n\n".strip_tags($remote)."\n\n";
//mail in html
$mail_text .= "--$mail_boundary\n";
$mail_text .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
$mail_text .= "Content-Transfer-Encoding: 7bit\n\n";
$mail_text .= rel2abs($remote,$baseurl)."\n";
$mail_text .= "--$mail_boundary--\n";
//mail($mailto,"La Pagina $url2check è cambiata",$mail_text,$mail_header);
//aggiorno modello
$fh = fopen($local_model,'w');
fwrite($fh,$remote);
fclose($fh);
}
?>
credo che dai commenti sia abbastanza chiaro cosa fa... ma cmq.. per i non php-isti:
alla prima invocazione crea un file chiamato "model" in cui copia la pagina che deve controllare.
In tutte le chiamate successive confronta la pagina remota con il modello locale, se trova differenze allora manda una mail (con allegato il codice della pagina.. anche se ancora non funziona alla perfezione la funzione per convertire i path relativi con quelli assoluti.. e quindi la pagina non si vedrà perfetta) e salva la nuova pagina (quella modificata) nel file modello.. in modo che non venga mandata più di una e-mail per ogni cambiamento.
Basta farlo lanciare da crontab ad un intervallo prestabilito.
Scusate se sono leggermente OT essendo questo il forum SW... ma in mancanza di un'alternativa in SW vero e proprio (o in caso di esigenza di farlo girare 24/24) può essere utile ha chi ha un server a disposizione