Bonsoir,

nous souhaitons démarrer un service initd distant en utilisant SSH et en récupérant stdout stderr et le code de retour.

Le module Net::SSH:: Perl semble tout indiqué et nous l'avons utilisé pour d'autres demandes ; par contre, dans le cas présent, le service distant est bien démarré mais le programme ne rend pas la main.

Seule la solution avec l'utilisation de system rend la main, nous renvoie un code de retour et les sorties dans /tmp. Hélas, si nous essayons de lancer un service distant inexistant, le code retour est 0 alors qu'il y a eu une erreur : seul contrôle possible, analyser le fichier de log produit dans /tmp.

Est-il possible de démarrer le service distant avec le module tout en récupérant la main ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
sub process {
    my ( $user, $host, $mode ) = @_;
 
    # test 1 Net::SSH:Perl
#    my @keyfile = ("/home/$user/.ssh/id_rsa");
#    my $cmd = "sudo /etc/init.d/jboss_penh2-web $mode";
#    oxa_msg_info ($r_log, 1, "Exécution commande SSH => $cmd" );
#
#    my $sshobj = Net::SSH::Perl->new( $host, identity_files=>\@keyfile);
#    $sshobj->login();
#    my( $stdout, $stderr, $rc ) = $sshobj->cmd($cmd);
 
    # test 2 - backticks
#    my $cmd = "ssh $user" . '@' . $host . ' sudo /etc/init.d/jboss_penh2-web ' . "$mode > /tmp/ssh.stdout 2>&1 && cat /tmp/ssh.sdtout &";
#    oxa_msg_info ($r_log, 1, "Exécution commande SSH => $cmd" );
#    my @out = `$cmd`;
 
    # test 3 - system
    my $cmd = "ssh $user" . '@' . $host . ' sudo /etc/init.d/jboss_penh2-web ' . "$mode > /tmp/ssh.stdout 2>&1 && cat /tmp/ssh.sdtout &";
    my $rc = system($cmd);
    $rc = $rc >> 8;
    oxa_msg_info ($r_log, 1, "Exécution commande SSH => $cmd - RC : $rc" );
[...]