Sistema de caidas de servidor, se agradece cualquier mejora

Francisco Cerd?
24 de Julio del 2004
Buenas que tal?, explico, este script mira todos los servidores de una base de datos para comprobar el estado, si al comprobarlo falla 2 veces envia un email diciendo que el servidor a caido. El tema es que el verdadero programa esta exo para envio de sms con una compañia que oferece atraves de una url que se envie el sms. En fin, lo que me gustaria es que se ejecutara cada 10 minutos, es decir el servidor LINUX lo fuera ejecutando cada 10 minutos, pero el problema esta en que claro el tema del sms, lo que ago es hacer un header location, y claro, no lo hace porque no se ejecuta en un navegador sino que el linux... si alguien hace una mejora o haya la solución a este problema se lo agradeceria. Gracias. Atentamente Francisco C. de www.prostylo.com

Os pego el código
<?
/*
Programación iniciada por Francisco Cerdà componente
del equipo de Software Professional Stylo
www.prostylo.com
Se agradecerá cualquier modificación etc...
porvafor, si encontrais mejoras, porfavor ser enviadas
a [email protected]
/*
/*
CREATE TABLE `servidores` (
`id` int(5) NOT NULL auto_increment,
`ip` varchar(30) NOT NULL default '',
`timeout` int(2) NOT NULL default '30',
`puerto` int(10) NOT NULL default '80',
`nombre` varchar(255) NOT NULL default '',
`estado` int(1) NOT NULL default '1',
`caida` int(1) NOT NULL default '0',
PRIMARY KEY (`id`)
) TYPE=MyISAM CHARSET=latin1 AUTO_INCREMENT=2 ;
*/
?>
<? // Config
$email="[email protected]";
// Confirguración Servidor Primario
$ip_1="000.000.000.000";
$user_1="usuario";
$pass_1="password";
$base_de_datos_1="base_de_datos";
?>
<?php // Conectamos con el principal servidor para comprobar estado de los servidores
$errores=0;
If(!$link=mysql_connect($ip1,$user_1,$pass_1)) { $errores++; mail($email,"Servicio de SMS, Professional Stylo.","Error al conectar, DDBB","From: $email"); exit(); }
If(!mysql_select_db($base_de_datos_1,$link)) { $errores++; mail($email,"Servicio de SMS, Professional Stylo.","Error al seleccionar la DDBB","From: $email"); exit(); }
// Miramos los servidores caidos, comprobamos si ya están levantados y si dan afirmativo les ponemos estado 1
$sql="SELECT * FROM servidores WHERE estado=0 && caida=2";
$result=mysql_query($sql,$link);
// Listamos todos los servers y empezamos el proceso
If ($row=mysql_fetch_array($result))
{ DO {
$ip=$row["ip"];
// Intentamos conectarnos al servidor y si la operación no ha dado negativo
If ( $open = fsockopen($ip,$row["puerto"],$errno,$errstr,$row["timeout"]))
// Actualizamos el registro para determinar que el servidor se encuentra de nuevo operativo
{ mysql_query("UPDATE servidores SET estado=1, caida=0 WHERE ip='$ip'", $link); }
}
WHILE ($row = mysql_fetch_array($result));
}
// Ponemos el contador de errores a 0
$contador=0;
$sql="SELECT * FROM servidores WHERE estado=1 ";
$result=mysql_query($sql,$link);
// Listamos todos los servers con estado operativo y empezamos el proceso
If ($row=mysql_fetch_array($result))
{ DO {
$ip=$row["ip"];
// Intentamos conectarnos al servidor
// Si la operación ha fallado
If (!$open = fsockopen($ip,$row["puerto"],$errno,$errstr,$row["timeout"]))
{
// Sumamos 1 en la caida ( max 2 )
$caida=0;
$caida=$row["caida"]+1;
// Si ha abido 2 fallos de conexión
If($caida>=2)
{
// Actualizamos el registro
mysql_query("UPDATE servidores SET caida=2, estado=0 WHERE ip='$ip'",$link);
// Asignamos al mensaje la ip fallada en 2 intentos y sumamos el contador para luego ejecutarse el envio
$ips .=" $ip,";
$contador++;
}
// Si sólo ha abido 1 caida, actualizamos el registro
else { mysql_query("UPDATE servidores SET caida=1 WHERE ip='$ip'",$link); }
}
} WHILE ($row = mysql_fetch_array($result));
}
If(!$contador==0)
{
// Si hemos encontrado caidas con 2 fallos, enviamos el registro
$msg = "Servidor(es): ".$ips." parecen caidos.";
mail($email,"Servidor(es) Caidos",$msg,"From: $email");
}
?>