Archives par mot-clé : Ligne de commande

Ainsi cron cron cron, les petites marionnettes

Publié dans Geekeries | Laisser un commentaire

ça cron ?
Voilà 3 mois que j’ai écris un billet intitulé avec autant de mauvais goût que celui que vous êtes en train de lire : ça cron ! Mise à part leur entrée en matière un peu capillotractée, ces 2 billets abordent le même sujet : les crons.
Cron, c’est un système sous Linux qui permet de déclencher un événement à intervalle régulier. Par exemple on peut exécuter tous les jours un script PHP qui nettoie une base de données, ou une ligne de commande Shell qui ouvre un lecteur audio et joue un titre au hasard. Bref, c’est un outils permettant de faire pas mal de choses intéressantes et qui font un peu rêver. Comme je l’expliquais précédemment, j’ai trouvé mon bonheur pour apprendre à utiliser cron sur le site Code18 : Installer un cronjob, mais à l’époque, je n’avais pas eu le temps de tester. Aujourd’hui, c’est chose faites ! Ce petit billet a donc pour but de retracer les grands étapes d’utilisation d’un cron.

Ce dont on a besoin

Tout simplement : un serveur accessible en ligne de commande sur lequel cron est installé.
Pour vérifier si cron est utilisable, il faut utiliser la ligne de commande qui liste les événements programmés :

crontab -l

Si cron est utilisable la liste des événements programmés s’affichera, ou s’il n’y en a pas, un message du style : no crontab for ******.

Dans le cas contraire : -bash: /usr/bin/crontab: Permission denied ou -bash: crontab: command not found.

Pour tout cela, il faut bien sûr se connecter auparavant au serveur en SSH :

ssh user@serveur

Ajouter ou modifier un événement

Il faut utiliser la ligne de commande :

crontab -e

Celle-ci ouvrira le fichier crontab (contenant les événements programmés) sous l’éditeur par défaut, vim par exemple.
Continuer la lecture

Envoyer un email en ligne de commandes

Publié dans Geekeries | Laisser un commentaire

Parmi les petites choses inutiles que j’ai appris aujourd’hui (suite à un cours de réseaux), j’ai notamment découvert comment envoyer un e-mail en ligne de commandes. Voici les étapes à suivre. A noter que le serveur renvoie 250 OK quand la commande a réussi.

Se connecter à un serveur telnet

D’après ma compréhension actuel, il faut se connecter sur un serveur telnet pour envoyer un e-mail. Donc est justement ce serveur. Mais y a surement moyen de faire autrement.

telnet <hote> 25

Serveur d’envoi, émetteur et récepteur

correspond tout simplement au domaine qui envoie l’email. Donc pour l’adresse test@testons.fr, c’est testons.fr. Il ne reste plus qu’à préciser l’e-mail de l’expéditeur (qui peut être n’importe quoi), et l’e-mail du récepteur (pour le coup, vaut mieux que ce soit la bonne adresse).

helo <domaine> mail From:<email-emetteur> rcpt To:<email-recepteur>

Contenu de l’e-mail

Il suffit de taper :

data

Le sendMail vous laisse alors le champ libre pour écrire ce que vous voulez. Commençons par l’entête de l’e-mail, en voici un exemple minimaliste.

From: email-emetteur
To: email-destinataire
Date: date de création du message

Il est à noter que l’on peut écrire n’importe quoi comme informations. Elles seront affichés à l’utilisateur, mais cela ne veut pas dire que ces informations sont justes. Mais il est possible de préciser d’autres choses :

Subject: Votre sujet
From: email-emetteur
Reply-To: email à utiliser pour la réponse
Date: date du message
Mime-Version: 1.0
To: email-destinataire
Cc: email-destinataire en copie carbonne

Il y a d’autres choses que je n’ai pas compris :

Received: information sur le chemin suivi
Message-Id: numero@domaine
X-Phone: message_Id
X-Mailer: ?

Bref, laissez une ligne vide et commencez à écrire votre message. Il vous faudra terminer par un point.


J'écris mon message, je suis content !
Super content !
.

Quitter la connexion

Rien de plus simple :

quit

Résumons

Avec tout ça, on peut envoyer un e-mail en ligne de commandes à un utilisateur en utilisant les caractères que l’on veut (sauf dans le sujet) et en précisant ce qu’on veut pour l’émetteur et le serveur d’envoi. Bref, c’est assez fun et ça marche vraiment bien. Reste donc à trouver une parade aux 2 limitations citées plus haut.

Grub

Configurer Grub

Publié dans Geekeries | Laisser un commentaire

Je me suis acheté un tout nouvel ordinateur portable récemment. Un truc un peu costaud qui me permet de faire tourner Eclipse et d’écouter de la musique en même temps. Du coup, je passe un peu de temps à le configurer selon mes besoins et j’ai notamment dû réinstaller plusieurs fois Ubuntu suite à de mauvaises manipulation de ma part, ou à cause de choses qui ne me convenaient pas au niveau de mes partitions. Bref, ça m’a permis de configurer plusieurs fois Grub, et donc de faire quelques tests
Pour modifier l’OS se chargeant par défaut dans Grub, et configurer la liste des OS qui s’affichent, il faut modifier le fichier /boot/grub/menu.lst. Vu qu’il faut avoir des droits d’administrateurs pour modifier ce fichier, le plus simple est de taper dans un terminal : sudo vim /boot/grub/menu.lst ou sudo gedit /boot/grub/menu.lst.

Configurer la liste des OS

Tout en bas du fichiers se trouve la liste des OS qui s’affichent. Pour ma part, j’ai enlevé le « memory test » d’Ubuntu et j’ai customisé un peu les noms (Windows Vista (loader) deviens Windows 7. Je crois que je me suis fait avoir sur la marchandise… Windows 7 ressemble autant à Windows Vista que Firefox 3.5 à Firefox 3, ça devient n’importe quoi…).

OS par défaut

Quelque part dans le fichier, se trouve une ligne contenant : default 0. Il suffit de changer le 0 par le numéro de l’OS (son ordre dans la liste) dans la liste d’OS tout en bas.

On commence à compter à partir de 0.

  • le premier OS est en général la distribution Linux
  • ensuite il y a le recovery mode de Linux
  • le memory test
  • une ligne « Other operating system »
  • et enfin Windows. Donc Windows est le numéro 4. (oui, la ligne « Other operating system » compte pour 1)

Rien de très compliqué. En fouillant dans le fichier, il y a moyen de modifier le temps d’attente, etc. Ce que j’aimerai tester, c’est de mettre Windows en première position. Je teste et j’en reparle.

SQL et RENAME

Publié dans SQL | Laisser un commentaire

Cela fait plusieurs fois que je cherche à renommer une table en ligne de commandes, et plusieurs fois que je re-re-regarde la doc MySQL sur RENAME. Dans l’espoir que ça rentre, et par ne pas avoir à re-re-re-rechercher la prochaine fois, voici comment fonctionne cette commande. L’idée est de renommer la table « chaise » pour l’appeler « chaise_pliante » (hum, original !).
Pour cela, rien de plus simple :

RENAME TABLE chaise TO chaise_pliante;

Pour renommer plusieurs tables à la fois, il suffit de séparer les blocs ancien_nom TO nouveau_nom par une virgule.

RENAME TABLE chaise TO chaise_pliante, tableau TO tableau_pliante;

Mais cette commande est aussi utile pour déplacer une table d’une base de données dans une autre. Pour cela, il faut faire précéder le nom de la table par le nom de la base de données. Donc en résumé, on a :

RENAME TABLE [ancien_nom_db.]ancien_nom_table TO [nouveau_nom_db.]nouveau_nom_table;

A noter que cela fonctionne aussi pour les vues (tant qu’on ne change pas de base de données) et pour les tables temporaires. Et on peut aussi faire cela avec ALTER TABLE :

ALTER TABLE ancien_nom RENAME nouveau_nom;

Bon, avec un peu de chance, je crois que ça va me rester !

ça cron

Publié dans Geekeries | Laisser un commentaire

Voilà quelques temps qu’un billet « ça cron » trainait dans ma dizaine de billets non terminés… Cron, c’est un système sous Linux qui permet de déclencher un événement à intervalle régulier, comme par exemple l’exécution d’un script PHP qui nettoie une base de données, ou d’une ligne de commande Shell qui ouvre un lecteur musique et joue un titre au hasard. Bref, avec cron on peut faire plein de petites choses utiles (ou pas)… Je m’y suis intéressé durant mon stage, mais je n’ai pas eu l’occasion de mettre en pratique. Ce n’est toujours pas le cas, mais infinite loop a écrit un billet sur son blog [Code18|http://code18.blogspot.com] qui a bien clarifié les choses. Donc pour comprendre et apprendre à utiliser des cron : * [Installer un cronjob|http://code18.blogspot.com/2009/10/installer-un-cronjob.html] Et aussi 2 autres articles qui m’avaient permis de bien comprendre les choses il y a quelques mois : * [Page de man sur cron|http://matthieu.developpez.com/execution_periodique] * [Utilisation avancée de cron sous Linux et Windows|http://www.linux-france.org/article/man-fr/man5/crontab-5.html] Si un jour je test, j’en reparlerai surement. D’ici là, have fun!

Import/Export MySQL en ligne de commandes

Publié dans SQL | Laisser un commentaire

Dans un précédent billet où j’expliquais mes déboires avec les grosses bases de données (on y trouvait aussi des conseils pour ne pas s’arracher les cheveux), j’ai expliqué comment importer une base de données MySQL à partir d’un fichier SQL en ligne de commandes grâce à source ou mysql. Aujourd’hui, j’ai découvert ce que je cherchais depuis pas mal de temps : exporter une base de données MySQL dans un fichier SQL en ligne de commandes, grâce à mysqldump. !

Importer un fichier SQL en ligne de commandes

J’ai une table de 3 millions de tuples (très très grosses quoi), que je souhaite importer dans ma base de données. Pour se faire, j’ai un fichier SQL assez volumineux contenant les requêtes d’insertions qui vont bien. Utiliser PhpMyAdmin serait long et il y a des risques que cela ne fonctionne pas si le fichier est trop gros. La solution consiste à utiliser des lignes de commandes, comme ça, pas de risques d’arrêts inopinés (ou presque) et c’est vraiment plus rapide.
Continuer la lecture

Comment importer une grosse base de données

Publié dans SQL | Un commentaire

Ce billet aurait aussi pu se nommer « Vive la ligne de commandes ! ».
Je pense arriver au bout de mes peines avec ma grosse tables de 3 millions de tuples (qui n’en fait d’ailleurs toujours pas 3 millions, alors j’espère que ça tiendra le coup quand tous les tuples seront là), et j’ai notamment pas mal galéré pour la transférer d’une base de données à une autre. (local -> serveur de développement) Si on utilise PHP, ou PhpMyAdmin, pour transférer sa BDD, on se retrouve vite avec de très long temps d’attente et avec une machine qui rame jusqu’à la mort. Quelques idées pour survivre entier à ce calvaire :
sql

  • Préférer le transfert à l’aide de fichiers. Car le copier/coller de requêtes fonctionnent pour de petites tables, mais ça fait très vite ramer votre machine de course pour de grosses tables. Il suffit d’exporter les tables de son choix via PhpMyAdmin (à l’accueil d’une base > exporter : pour exporter les tables de son choix. A l’accueil d’une table > exporter : pour exporter directement la table en question), puis dans les importer via PhpMyAdmin, ou en ligne de commandes. Il vaut mieux éviter de cocher la case « Insertion Complète » qui créé une seule requête INSERT INTO table (val1, val2) VALUES ('blabla', 'bloublou'), ('blibli', 'bleble'), ..., ('blublu', 'bloblo'); ce qui peut être un peu trop lourd. Mieux vaut créer autant de requêtes qu’il y a d’insertions dans ce cas. (le mieux serait de faire une requête pour une trentaine d’insertions, c’est vraiment plus rapide, mais cela oblige à coder tout ça soit même. Edit: apparemment, il faut choisir « Insertions Etentdues ».)
  • Préférer l’utilisation des lignes de commandes. Pour plusieurs raisons : plus de problèmes avec les timeout de MySQL ou de PHP puisqu’on effectue une commande à la fois. (sauf si on commande est trop lourde. Dans le cas d’une insertion complète par exemple), on contrôle réellement tout ce qui se passe en temps réel et on peut réellement tout arrêter en temps réel. (suffit de fermer le terminal quoi !), on ne passe par aucun intermédiaire et c’est donc vraiment plus rapide.

Continuer la lecture