H
HomeGuard
Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Buenas betas.
Tengo la necesidad de que apenas cae una web, tengo que enterarme enseguida para poder resolver el problema.
Por lo que arme este mini script en php y quiero compartirlo.
Se aceptan Mejoras del codigo.
Explicacion:
El script costa de 2 partes.
Una parte va en el servidor a monitorear y la otra va en un servidor remoto (cualquier gratuito sirve perfectamente, incluso se puede poner en 2 servidores a la ves para tener mas redundancia).
Parte 1 - Servidor a monitorear.
Nombre del Archivo : check.php
Parte 2 - Servidor Externo.
arc.txt (archivo de texto con permisos 777, cargarlo con un 1 en la primer linea).
config.php (archivo de configuraciones generales).
urlping: direccion del sitio a checkea con www
puerto: puerto que utiliza para ver si el sitio responde, normalmente es puerto 80 para sitios web.
tiempo: tiempo maximo que espera a que el servidor responda en segundos.
urlfile: direccion con http de la ubicacion donde alojo el archivo de la parte 1
email: url del email al que enviar el alerta.
index.php (archivo general).
Funcionamiento del Script.
Primero se chequea que el servidor responda la peticion, en base a la respuesta se carga en un arreglo un valor 0 = correcto 1 = error
esto solo nos devuelve si el servidor esta respondiendo correctamente por el puerto que elegimos.
pero hay veces que el servidor responde bien para la web no es visible por un error 4xx o 5xx (problema con apache o .htaccess, etc) y con ese checkeo no identifica ese error y no nos va a alertar de que algo funciona mal.
por lo que el segundo paso es obtener el codigo fuente del archivo de la parte 1 e ingresarlo en un string.
luego se busca una palabra clave en ese string.
Si por algun motivo la respuesta es un error 4xx o 5xx, al buscar la palabra clave no la va a encontrar y vamos a detectar el 4xx o 5xxx.
En caso de que el script detecte en alguno de los 2 pasos un error nos envia un email avisandonos que fallo.
si por ejemplo, esta funcionando correctamente y falla, nos envia un email avisandonos y deja de enviar de que esta fallando para que no nos llene la casilla del mismo email, una ves que vuelve a estar online, nos envia otro email avisando que ya esta online.
Lo ideal es meter el index.php en un cron jobs y ejecutarlo cada X minutos.
Archivo "check.php" subirlo al servidor que quieren monitorear.
Archivos que se encuentran dentro de la carpeta Script subanlo a hosting free o hosting externo al que se desee monitorear.
pongan el index.php en un cron jobs y al archivo arc.txt tienen que darles permisos 777
https://mega.nz/#!IpIT0QAT!ucvz3MiFUjLd7q_GYOncKEcORzmZc5SfjsOdm2XQmj8
Espero que les sea util
Saludos HomeGuard
Tengo la necesidad de que apenas cae una web, tengo que enterarme enseguida para poder resolver el problema.
Por lo que arme este mini script en php y quiero compartirlo.
Se aceptan Mejoras del codigo.
Explicacion:
El script costa de 2 partes.
Una parte va en el servidor a monitorear y la otra va en un servidor remoto (cualquier gratuito sirve perfectamente, incluso se puede poner en 2 servidores a la ves para tener mas redundancia).
Parte 1 - Servidor a monitorear.
Nombre del Archivo : check.php
<html>
<head>
<title>Script HomeGuard</title>
</head>
<body>
$*HomeGuard*$
</body>
</html>
Parte 2 - Servidor Externo.
arc.txt (archivo de texto con permisos 777, cargarlo con un 1 en la primer linea).
config.php (archivo de configuraciones generales).
<?php
$urlping = "www.ejemplo.com";
$puerto = 80;
$tiempo = 10;
$urlfile = "http://www.ejemplo/check.php";
$estado = array();
$email = "ejemplo@dominio.com";
$headers = "From: $email" . PHP_EOL;
$headers .= "Reply-To: $email" . PHP_EOL;
$headers .= "MIME-Version: 1.0" . PHP_EOL;
$headers .= "Content-type: text/plain; charset=utf-8" . PHP_EOL;
$asunto = 'Noticias de tu Servidor! IMPORTANTE';
$e_body = "Ultimo Estado de Tu Servidor:" . PHP_EOL . PHP_EOL;
$e_reply = "Gracias por usar Este Script - HomeGuard";
?>
urlping: direccion del sitio a checkea con www
puerto: puerto que utiliza para ver si el sitio responde, normalmente es puerto 80 para sitios web.
tiempo: tiempo maximo que espera a que el servidor responda en segundos.
urlfile: direccion con http de la ubicacion donde alojo el archivo de la parte 1
email: url del email al que enviar el alerta.
index.php (archivo general).
<?php
include('config.php');
/*--------------------Comprueba Estado Anterior del Servidor------------------------------*/
$arc = fopen("arc.txt", "r");
$valor = fgets($arc);
fclose($arc);
/*--------------------Comprueba Respuesta del Servidor------------------------------*/
$servidor = @fsockopen($urlping, $puerto, $errno, $errstr, $tiempo);
if ($servidor)
{
$estado[] = 0;
}
else {
$estado[] = 1;
}
@fclose($servidor);
/*--------------------Comprueba Lectura de un Archivo-----------------------------*/
$texto = @file_get_contents($urlfile);
$buscar = "$*HomeGuard*$";
$chequea = strpos($texto, $buscar);
if ($chequea == true)
{
$estado[] = 0;
}
else
{
$estado[] = 1;
}
/*--------------------Gestiona Errores------------------------------*/
if (($estado[0] == 0) and ($estado[1] == 0) and ($valor == 0))
{
$arc = fopen("arc.txt", "w");
fwrite($arc, "0");
fclose($arc);
}
if (($estado[0] == 1) and ($estado[1] == 0) and ($valor == 0))
{
$arc = fopen("arc.txt", "w");
fwrite($arc, "1");
fclose($arc);
$e_content = "El servidor no Responde al Ping" . PHP_EOL . PHP_EOL;
$msg = wordwrap( $e_body . $e_content . $e_reply, 70 );
mail($email, $asunto, $msg, $headers);
}
if (($estado[0] == 0) and ($estado[1] == 1) and ($valor == 0))
{
$arc = fopen("arc.txt", "w");
fwrite($arc, "1");
fclose($arc);
$e_content = "El servidor Responde Correctamente pero Es imposible Acceder al Archivo (errores 4xx o 5xx)" . PHP_EOL . PHP_EOL;
$msg = wordwrap( $e_body . $e_content . $e_reply, 70 );
mail($email, $asunto, $msg, $headers);
}
if (($estado[0] == 1) and ($estado[1] == 1) and ($valor == 0))
{
$arc = fopen("arc.txt", "w");
fwrite($arc, "1");
fclose($arc);
$e_content = "El servidor no Responde al Ping y por consecuencia no puede leer el archivo" . PHP_EOL . PHP_EOL;
$msg = wordwrap( $e_body . $e_content . $e_reply, 70 );
mail($email, $asunto, $msg, $headers);
}
if (($estado[0] == 0) and ($estado[1] == 0) and ($valor == 1))
{
$arc = fopen("arc.txt", "w");
fwrite($arc, "0");
fclose($arc);
$e_content = "El Servidor ya se encuentra Online Nuevamente" . PHP_EOL . PHP_EOL;
$msg = wordwrap( $e_body . $e_content . $e_reply, 70 );
mail($email, $asunto, $msg, $headers);
}
?>
Funcionamiento del Script.
Primero se chequea que el servidor responda la peticion, en base a la respuesta se carga en un arreglo un valor 0 = correcto 1 = error
esto solo nos devuelve si el servidor esta respondiendo correctamente por el puerto que elegimos.
pero hay veces que el servidor responde bien para la web no es visible por un error 4xx o 5xx (problema con apache o .htaccess, etc) y con ese checkeo no identifica ese error y no nos va a alertar de que algo funciona mal.
por lo que el segundo paso es obtener el codigo fuente del archivo de la parte 1 e ingresarlo en un string.
luego se busca una palabra clave en ese string.
Si por algun motivo la respuesta es un error 4xx o 5xx, al buscar la palabra clave no la va a encontrar y vamos a detectar el 4xx o 5xxx.
En caso de que el script detecte en alguno de los 2 pasos un error nos envia un email avisandonos que fallo.
si por ejemplo, esta funcionando correctamente y falla, nos envia un email avisandonos y deja de enviar de que esta fallando para que no nos llene la casilla del mismo email, una ves que vuelve a estar online, nos envia otro email avisando que ya esta online.
Lo ideal es meter el index.php en un cron jobs y ejecutarlo cada X minutos.
Archivo "check.php" subirlo al servidor que quieren monitorear.
Archivos que se encuentran dentro de la carpeta Script subanlo a hosting free o hosting externo al que se desee monitorear.
pongan el index.php en un cron jobs y al archivo arc.txt tienen que darles permisos 777
https://mega.nz/#!IpIT0QAT!ucvz3MiFUjLd7q_GYOncKEcORzmZc5SfjsOdm2XQmj8
Espero que les sea util
Saludos HomeGuard
Última edición: