Bonjour,
je voudrais savoir comment je peux savoir si un service est installé sous Linux est le démarrer le cas échéant et tout cela en perl.
Le service en question est en fait Mysql.
Merci
Version imprimable
Bonjour,
je voudrais savoir comment je peux savoir si un service est installé sous Linux est le démarrer le cas échéant et tout cela en perl.
Le service en question est en fait Mysql.
Merci
La manière de démarrer un service varie d'une distribution à l'autre (en supposant que tu as installé mysql via un package de ta distbib). Fait comme tu ferais à la main.
En ligne de commande je sais le faire (sans parler de distribution particulière) mais je ne sais pas comment je peux récupérer l'état d'un service avec des commandes perl dans script et ensuite les traiter.
J'avais fait ça à une époque chez moi sur mon Linux.
Lance la commande UNIX t'affichant la liste des services tournant actuellement sur ta machine (avec un p'tit grep qui va bien pour ne ressortir que les lignes concernant mysql). Fait travailler les expressions régulières sur le résultat retourné et à toi de jouer ensuite pour savoir s'il faut ou non lancer le démon de mysql
;)
PS : si ça peut attendre, je crois que j'ai encore mon script Perl quelque part à la maison, je ne peux rien dire de concret avant ce soir
Ce serait sympa de voir ton ancien script perl si tu le retrouves en moins de deux jours car plus tard mon projet sera fini.
(Faire un projet en trois jours en formation c'est pas cool :?)
+1 avec Matafan
Retourne nous les éléments suivants STP :
- la syntaxe exacte de la commande que tu tapes dans une console UNIX pour afficher la liste des process mysql actifs
- le résultat (fais un copié/collé) retourné dans la console
- la syntaxe de démarrage de ton sgbd
Edit :
Pour t'aider un peu, voici un rapide bout de code à mettre à jour selon tes besoins bien évidemment :
Les caractères ` dans la ligne $_ = ` ... s'obtiennent avec la touché 7 du pavé alphanumérique de ton clavier.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 use strict; use warnings; eval { $_ = `ta commande UNIX pour afficher les services tournant ICI`; }; die("pb en utilisant la commande UNIX : $@\n") if ($@); if ($_ =~ /mysql/i) # à peaufiner éventuellement { print "Le démon tourne\n"; } else { print "Démon non lancé\n"; system("commande mysql pour lancer le SGBD"); }
Ceci est sous Debian. Manque de chance Debian ne possède pas la commande service nom_du_service status que l'on pet trouver sous CentOS (découlant de RedHat)Code:
1
2
3
4
5
6
7 grp3-proxy:~# ps aux | grep mysql root 3627 0.0 0.1 3892 1304 ? S 11:13 0:00 /bin/sh /usr/bin/mysqld_safe mysql 3758 0.0 1.6 127392 16180 ? Sl 11:13 0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock root 3760 0.0 0.0 3004 608 ? S 11:13 0:00 logger -p daemon.err -t mysqld_safe -i -t mysqld root 3790 0.0 0.1 3500 1212 tty1 T 11:22 0:00 man mysql root 3835 0.0 0.1 3500 1208 pts/0 T 11:43 0:00 man mysql root 3890 0.0 0.0 3144 768 pts/0 S+ 12:10 0:00 grep mysql
Pour la syntaxe de la commande démarrage, je la connais pas encore en débian, désolé.
Code:
1
2 /etc/init.d/mysql Usage: /etc/init.d/mysql start|stop|restart|reload|force-reload|status
Ok, alors en adaptant mon code, ça doit donner ceci :
A tester :)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 use strict; use warnings; eval { $_ = `ps aux | grep mysql`; }; die("pb en utilisant la commande UNIX : $@\n") if ($@); if ($_ =~ /mysqld .+basedir.+user=mysql/i) { print "Le démon tourne\n"; } else { print "Démon non lancé\n"; system("mysql start"); # pas sûr de la commande ici }
Merci pour l'aide apporté. Je ne ferme pas le sujet pour l'instant car je dois faire des manip avant de voir si cela fonctione.
Arioch au vu du post précédent le tiens je pense que la commande est:
system("/etc/init.d/mysql start");
mais comme toi ce n'est pas sûr.
J'ai retrouvé mon code :yaisse2:
Mon script me servait à l'époque pour démarrer ou couper le démon automatiquement.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 use strict; # Ne doit etre lancé qu'en root ! chomp($_ = `whoami`); if ($_ ne "root") { print "Ce programme doit etre lancé par \"root\" et non par \"$_\" !\n"; exec ("su"); } # On vérifie si le démon tourne déjà ou pas $_ = `ps ax | grep mysql`; if ($_ && $_ =~ /\/usr\/sbin\/mysqld/) # si le démon est actif, on l'arrete { eval { $_ = `/etc/rc.d/init.d/mysql stop`; }; die "Eval : erreur d'arret du démon\n" if ($@); print "\a$_"; } else # lancement du démon { eval { $_ = `/etc/rc.d/init.d/mysql start`; }; die "Eval : erreur de lancement du démon\n" if ($@); print "\a$_"; } exit;
Je viens de voir que je pouvais voir les champs de ma table avec les commandes SQL mises dans Perl.
Je voudrais savoir s'il est possible d'avoir le même style de présentation ( ASCII style ;) ) que celui de cette page à la section D ou plus bas toujours en passant par Perl.
Pour répondre à ta question (à moins que je ne sois hors sujet), tu peux piloter beaucoup de choses de ta base de données en Perl en utilisant le module DBI.pm dans ton script Perl.
Tu pourrais, depuis un script Perl, te connecter à ta BDD, lui poser des requètes SQL + ou - complexes, récupérer le résultat, travailler sur ce résultat (ou pas :mrgreen: ), mettre à jour ta base, etc.
PS : maintenant, à partir d'une console UNIX, il me semble qu'il est possible, en une seule ligne de commande, de se connecter à la bdd, lui poser une question simple du style "show databases" ou "show tables" et d'avoir le résultat dans la console en retour. Si c'est le cas, alors oui, en Perl tu pourras exécuter cette commande et en récupérer ce qu'elle t'aura retourné. Un peu comme dans le script que j'ai publié hier soir ;)
Tu as du répondre quand je modifiais mon message (ou pas). Pour le show tables , j'ai trouvé la "solution" et j'ai bien mes champs qui s'affiche dans la console.
Si tu as déjà utilisé mysql en console sous linux quand tu fais un show tables tu te retrouves avec un tableau "desiné" en ASCII (lignes =_ et colonnes = |).
C'est le style d'affichage que je cherche à avec mon show tables sous Perl car il m'affiche tous mes champs les uns en dessous des autres et c'est pas agréables à voir (en même temps j'en ai pas 15000 j'en ai que 5 pour mes tests mais faut savoir être exigeant)
Voici le code:et le résultatCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #! /usr/bin/perl use DBI; use strict; my $db = "DBI:mysql:informations_parc:localhost"; my $utilisateur = 'root'; my $mdp = 'administrateur'; my $dbconnect = DBI->connect($db, $utilisateur, $mdp); my $query="describe test"; my $sql=$dbconnect->prepare($query); $sql->execute(); while (my $row=$sql->fetchrow_arrayref) { print join("\t",@$row),"\n"; } $dbconnect->disconnect; exit;
Mon retour et bon mais je préfèrerais avoir un retour qui ressemble à ça;Code:
1
2
3
4
5 cpu varchar(255) NO carte mere varchar(255) NO catre video varchar(255) NO carte son varchar(255) NO alimentation varchar(255) NO
Ceci ne servira que pour mes test ensuite ça disparaitra de mon code.Code:
1
2
3
4
5
6
7
8
9 +--------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+--------------+------+-----+---------+-------+ | cpu | varchar(255) | NO | | NULL | | | carte mere | varchar(255) | NO | | NULL | | | catre video | varchar(255) | NO | | NULL | | | carte son | varchar(255) | NO | | NULL | | | alimentation | varchar(255) | NO | | NULL | | +--------------+--------------+------+-----+---------+-------+
Ce que je vais faire c'est lire un fichier ligne par ligne faire un imoprt dans mysql des divers champs (code Perl) puis faire de la consultations de tables par requete sql (hors code Perl)
Ok, il va te falloir changer ton print join (...) en printf dans ton code pour pouvoir le formater comme tu le désires.
Pour te donner un petit exemple :
Produit à l'affichage ceci :Code:
1
2
3
4
5
6 @_ = ("cpu","varchar(255)","NO"); print "| "; printf("%10s | ", $_[0]); printf("%15s | ", $_[1]); printf("%5s |\n", $_[2]);
Code:| cpu | varchar(255) | NO |
Merci pour vos aides.