J'ai un script Perl dans lequel je veux d'abord vérifier s'il est possible de ssh dans le serveur avant de réellement faire ssh. Donc, si c'est possible de ssh, alors allez-y et ssh dans ce serveur, sinon gérer cette exception de manière appropriée.Perl script pour vérifier si possible de ssh dans le serveur distant
J'ai donc ce script qui passe par un fichier texte avec une liste des bases de données, et essaie de ssh sur chaque serveur pour effectuer une commande bash qui vérifie si le serveur exécute MySQL SST ou non:
#!/usr/bin/perl -w
use strict;
use warnings;
use 5.010;
use DBI;
use Encode;
use IO::File;
use JSON;
use utf8;
BEGIN {
binmode STDERR, ':utf8';
binmode STDIN, ':utf8';
binmode STDOUT, ':utf8';
}
my $time = localtime();
my $file = '/opt/db-servers/db.txt';
open my $info, $file or die "Could not open $file: $!";
while(my $hostname = <$info>) {
chomp($hostname);
my $xtrabk_check = `ssh $hostname ps -ef |grep mysql | grep wsrep_sst_xtrabackup-v2`;
my $role_check = `ssh $hostname ps -ef |grep mysql | grep donor`;
my $error_log = `ssh $hostname ps -ef |grep mysql`;
if ($xtrabk_check ne ""){
if ($role_check ne ""){
my $cmd ="curl -vs -o /dev/null -X POST --data-urlencode 'payload={\"channel\": \"#db-wsrep-status-log\", \"username\": \"db-wsrep-status-log\", \"text\": \"$time: $hostname: --role Donor \n```$error_log```\", \"icon_emoji\": \":scorpion:\"}' 2>&1 /dev/null https://hooks.slack.com/services/GVadasdd/B6LSMF5GV/BIApnzoIldfdsrw343wf";
system($cmd);
}
else {
my $cmd ="curl -vs -o /dev/null -X POST --data-urlencode 'payload={\"channel\": \"#db-wsrep-status-log\", \"username\": \"db-wsrep-status-log\", \"text\": \"$time: $hostname: State transfer in progress, setting sleep higher mysqld \n```$error_log```\", \"icon_emoji\": \":scorpion:\"}' 2>&1 https://hooks.slack.com/services/GVadasdd/B6LSMF5GV/BIApnzoIldfdsrw343wf";
system($cmd);
}
}
}
close $info;
donc probablement avant d'effectuer les trois lignes ci-dessous, je veux être en mesure de savoir si ce serveur est en panne (ne peut donc pas le client ssh) ou non (ssh puis dans avec les commandes ci-dessous):
my $xtrabk_check = `ssh $hostname ps -ef |grep mysql | grep wsrep_sst_xtrabackup-v2`;
my $role_check = `ssh $hostname ps -ef |grep mysql | grep donor`;
my $error_log = `ssh $hostname ps -ef |grep mysql`;
Comment puis-je y arriver? D'ailleurs, l'URL floue a été modifiée, donc la sécurité inquiète.