Hola a todos. Hace tiempo que no escribo en el blog, sinceramente la mayoría de las cosas que he estado haciendo no podía hacerlas públicas. Bien, hoy he decidido publicar un script que me ha sido bastante útil. Este script está pensado para ejecutarse en consola, aunque si a alguien le hace falta es sencillo modificarlo para que funcione en un cronjob que se ejecute cada cierto tiempo y nos elimine esos incómodos procesos «sleep».Este código comprobará cada x tiempo los comandos «sleep» que se estén ejecutando en tu base de datos (ojo que esto depende de los permisos del usuario) y detendrá los que superen un tiempo de ejecución que le indiquemos. |
Para el funcionamiento de este script he usado una clase singleton de conexión a mysql que expliqué en un post anterior.
Este script es bastante básico pero podríamos añadirle notificaciones por email, si lo veis interesante.
Aquí va el código.
//Author: Fernando Rodríguez-Izquierdo Serrano require_once ("config.php"); //Archivo donde guardo las constantes HOSTNAME,USERNAME, etc.. require_once ("db.Class.php"); $comandoObjetivo = 'Sleep'; //Comando que queremos detener con la ejecución de este script $tiempoLimite = 15; //Tiempo máximo de ejecución de un $comandoObjetivo $segundos = 60; //Cada cuanto tiempo se realiza una comprobación $db = db::getInstancia(HOSTNAME, USERNAME, PASSWORDDB, DATABASE); while (TRUE) { $query = "show full processlist"; $result = $db -> dameQuery($query); $i=1; while ($proceso = mysql_fetch_array($result)) { if ($proceso['Command'] == $comandoObjetivo) { if($i%2==0) $color = "\033[32m"; else $color = "\033[31m"; echo $color.$proceso['Id'] . ' ' . $proceso['Command'] . ' ' . $proceso['Host'] . ' ' . $proceso['Time']; if ($proceso['Time'] > $tiempoLimite) { $query = "KILL " . $proceso['Id']; $db -> dameQuery($query); echo " Proceso eliminado"; } echo "\n"; $i++; } } for($i=1;$i<=$segundos;$i++){ sleep(1); $cuentaAtras = $segundos-$i; if($i%2==0) $color = "\033[32m"; else $color = "\033[31m"; echo $color."********** SIGUIENTE COMPROBACION EN ".$cuentaAtras." SEGUNDOS ***********\r"; } echo "\n"; }
me función bien muchas gracias por el código