nov 27 2008

Limiter le temps d’exécution d’une requête MySQL

Vous est-il déjà arrivé de voir un de vos serveurs de base de données MySQL mis à genous par la faute de développeurs incompétents qui effectuent des requêtes sur des tables sans index composées de dizaines de millions de tuples ?
Si la réponse est oui, voici ma solution « one line » pour les calmer un peu ! :)

Logiciels utilisés :

  • GNU Awk 3.1.5
  • MySQL Client 5.0.51a
root@gnusquad:~# mysql -e 'SHOW PROCESSLIST' | awk 'BEGIN { MAX_TIME = 60 ; USERS = "boulet1|boulet2" } $6 > MAX_TIME && $5 == "Query" && $2 ~ USERS {print "KILL " $1 ";"}' | mysql

Petites explications sur le code « awk » :

  • $1 contient l’ID de la requête SQL
  • $2 contient le nom de l’utilisateur
  • $5 contient le type de commande (Query, Sleep, …)
  • $6 contient le temps d’exécution de la requête SQL en secondes
  • MAX_TIME contient le temps en secondes à partir duquel une requête doit être tuée
  • USERS contient une expression rationnelle indiquant les utilisateurs concernés par cette sanction

Il ne vous reste plus qu’à mettre ce script dans le « crontab » en pensant à vous connecter avec un utilisateur MySQL ayant le droit « SUPER » pour pouvoir tuer les connexions si besoin est. :)

À lire :


nov 22 2008

Mettez de la couleur dans votre « prompt » !

Tag: Debian GNU/Linux, SystèmeSylvain @ 18:26

Le « prompt », que l’on désigne par « invite de commande » en français est une chaîne de caractères indiquant que l’ordinateur est prêt à recevoir une saisie au clavier.

Les informations qui suivent concernent le shell livré par défaut avec la plupart des distributions, le bien nommé « Bash ».

Le « prompt » est défini dans une variable d’environnement nommée « PS1 », celle-ci peut contenir des données statiques mais également des « séquences d’échappement » spéciales permettant d’afficher des données dynamiques comme le nom d’utilisateur courant, le répertoire courant, etc. Il est également possible de mettre de la couleur afin d’égayer un peu votre terminal et surtout de vous retrouvez dans vos différents comptes utilisateurs ou dans vos différentes machines.

Voici la liste des séquences d’échappement intéressantes :

\h : le nom de la machine (hostname) jusqu'au premier point
\H : le nom de la machine complet
\j : le nombre de processus fils lancés en arrière plan
\e : caractère d'échappement (utile pour les couleurs)
\n : nouvelle ligne
\r : retour chariot
\u : le nom d'utilisateur courant
\w : le chemin complet du répertoire de travail courant
\W : le répertoire de travail courant
\$ : affiche un # si l'utilisateur est root sinon affiche un $
\[ : début d'une séquence de caractères non imprimables
\] : fin d'une séquence de caractères non imprimables
\D{format} : la date selon le format passé en paramètre (cf. la syntaxe de « strftime »)

Les couleurs quant à elles sont des « séquences d’échappement ANSI » entourées d’un début et d’une fin de séquence de caractères non imprimables. Ces séquences ont un format bien déterminé : celui-ci commence par « ESC[ » et se termine par « m ». Entre ces deux parties, il faut indiquer un code de mise en forme (gras, souligné, clignotement, etc) ainsi qu'un code pour la couleur désirée, les deux champs étant séparés par un point-virgule.

Voici la liste des mises en forme les plus courantes :

 0 : normal
 1 : gras
 4 : souligné
 5 : clignotement
 7 : négatif
22 : désactivation du gras
24 : désactivation du souligné
25 : désactivation du clignotement

Et la liste des couleurs :

0 : noir
1 : rouge
2 : vert
3 : jaune
4 : bleu
5 : magenta
6 : cyan
7 : blanc

À ces dernières doit être additionné un nombre afin de définir si l'on veut modifier la couleur du fond ou du texte tout en réglant l'intensité :

 30 : couleur du texte, intensité normale
 40 : couleur du fond, intensité normale
 90 : couleur du texte, intensité élevée
100 : couleur du fond, intensité élevée

Pour voir votre PS1 actuel, tapez simplement dans un shell :

user@gnusquad:~$ echo $PS1
\[\e[1;42m\]\u@\H\[\e[0;40m\]:\w\$

Décortiquons cette ligne :

\[   : début d'une séquence de caractères non imprimables (pour la couleur)
\e[  : début d'une séquence ANSI
1;42 : mise en forme grasse avec une couleur de fond verte intensité normale
m    : fin d'une séquence ANSI
\]   : fin d’une séquence de caractères non imprimables
\u   : nom d'utilisateur courant
@    : signe @
\H   : nom de la machine complète
\[   : début d'une séquence de caractères non imprimables
\e[  : début d'une séquence ANSI
0;40 : mise en forme normale avec une couleur de fond noir intensité normale
m    : fin d'une séquence ANSI
\]   : fin d’une séquence de caractères non imprimables
:    : signe :
\w   : chemin complet du répertoire de travail courant
\$   : caractère # si l'utilisateur est root sinon caractère $

Pour tester vos créations (ici un fond rouge qui peut être pratique pour l’utilisateur « root »), il vous suffira de taper dans un shell :

user@gnusquad:~$ PS1='\[\e[1;41m\]\u@\H\[\e[0;40m\]:\w\$'
user@gnusquad:~$

Une fois satisfait de votre « PS1 », vous n’aurez plus qu’à le mettre dans le fichier « /etc/bash.bashrc » (pour tous les utilisateurs) ou dans votre fichier « ~/.bashrc » (pour vous uniquement).

Notez au passage qu’il existe aussi trois autres variables d’environnement « PS2 », « PS3 » et « PS4 » que je vous laisse découvrir dans le man de bash ! ;-)

N’hésitez pas à proposer vos « prompt » en commentaires ! :)

À lire :


nov 20 2008

Captures d’écrans des applications disponibles dans Debian

Tag: Actualités, Debian GNU/LinuxSylvain @ 20:45

Le projet Debian vient de lancer un nouveau service destiné à recueillir les captures d’écrans d’un maximum d’applications faisant parti de la dite distribution. Ces captures pourront ensuite être utilisées dans diverses applications, notamment les gestionnaires de paquets graphiques. Actuellement, seul Synaptic sait tirer parti de ces captures d’écrans mais nul doute que ses concurrents le supporteront d’ici peu.

Concernant le site en lui même, celui-ci est plutôt bien fichu : il est « classe » (admirez, entre autre, l’effet de zoom lors d’un clic sur une miniature :) ) , sans fioritures, dispose d’un moteur de recherche, bref, c’est que du bonheur ! Rien de tel également pour découvrir de nouvelles applications intéressantes sans se fouler ! ;-)

Les captures d’écrans sont envoyées par les utilisateurs en respectant certaines règles, celles-ci sont alors soumises à vérification et sont automatiquement publiées sous les mêmes termes de licence que le paquet Debian du logiciel.

À lire :