IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Quelle type de connexion faut-il ouvrir pour lancer un script shell à partir d'une ap


Sujet :

Entrée/Sortie Java

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 496
    Points : 149
    Points
    149
    Par défaut Quelle type de connexion faut-il ouvrir pour lancer un script shell à partir d'une ap
    Bonjour

    à partir d'une application web développée en Java, j'aimerais lancer un script shell.

    Ce script shell se trouve sur un serveur de fichier unix.

    Mon application se trouve sur mon PC .

    Il me semble que pour exécuter un script shell qui se trouve sur une machine distante, il faut d'abord se connecter à cette machine par un nom de host, un login, et un mot de passe.

    Quelle type de connexion devrais-je faire dans ce cas ?

    J'ai essayé une connexion FTP et ça ne marche pas.

    voici le début du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ftpbean.ftpConnect(hostname, login, password);
    // changement de répertoire
    ftpbean.setDirectory(path);                
    System.out.println("Changement de répertoire OK");
     //=====================================================
     Runtime runtime = Runtime.getRuntime()
     Process process = Runtime.getRuntime().exec(new String[] { "titi.sh*" , "ABC" } );
    voici l'erreur

    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
    Changement de répertoire OK
    Une erreur de communication avec le serveur distant a eu lieu:
    java.io.IOException: Cannot run program "titi.sh*": CreateProcess error=2, The system cannot find the file specified
       at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
            at java.lang.Runtime.exec(Runtime.java:593)
            at java.lang.Runtime.exec(Runtime.java:466)
    ..............................
    ............................        
    Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
       at java.lang.ProcessImpl.create(Native Method)
            at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
            at java.lang.ProcessImpl.start(ProcessImpl.java:30)
            at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
            ... 4 more
    BUILD SUCCESSFUL (total time: 2 seconds)
    La connexion et le téléchargement du fichier se fait bien, mais dès que je rajoute les lignes qui font exécuter le script ça cause une erreur.

    Voici les droits d'accès du script : RWX RWX RWX

    voici les droits d'accès des répertoires constituant le chemin :
    RWX R-X R-X



    Merci

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    bah ouais, normal vas exécuter un script shell sur une plateforme windows (excepté CygWin) tu m'en diras des nouvelles

    Le Runtime.getRuntime exécute un process sur la machine locale, pas sur une machine distante...


    Bon sinon dans ton cas ce que tu dois réaliser est probablement une connexion SSH puis lancer les scripts sur la machine distante.

    Pour utiliser SSH en java tu as des API telles que JCraft
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Débutant
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 496
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par sinok
    Le Runtime.getRuntime exécute un process sur la machine locale, pas sur une machine distante...
    même si j'ai ouvert une connexion avec ftpbean ? il me semblait que le fait d'ouvrir une connexion avec un serveur distant, c'est comme si j'étais en local avec ce serveur.

    Citation Envoyé par sinok
    Bon sinon dans ton cas ce que tu dois réaliser est probablement une connexion SSH puis lancer les scripts sur la machine distante.

    Pour utiliser SSH en java tu as des API telles que JCraft
    Mais comment ça se fait que avec ma connexion ftpbean, je peux lister les fichiers se trouvant sur un répertoire donné du serveur distant ?

    regarde, avec le code suivant je peux télecharger le premier fichier, et aussi afficher la liste de tous les fichiers qui se trouvent sur un répertoire que j'ai spécifié dans la variable path

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
     
    package test;
    import <a href="ftp://ftp.ftpbean/" target="_blank">ftp.FtpBean</a>;
    import <a href="ftp://ftp.ftpexception/" target="_blank">ftp.FtpException</a>;
    import <a href="ftp://ftp.ftplistresult/" target="_blank">ftp.FtpListResult</a>;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
     
    public class MyFtpClient {
        private String hostname = "XXX";
        private String login = "YYY";
        private String password = "ZZZ";
        private String path = "/rep1/rep2";
        private String localDirectory = "C:\\";
     
        public static void main(String[] args) {
     
            MyFtpClient myFtpClient = new MyFtpClient();
            myFtpClient.Go();
     
     
        }    
        private void Go() {
            FtpBean ftpbean = new FtpBean();
            try {
     
     
                // connection
                ftpbean.ftpConnect(hostname, login, password);
                // changement de répertoire
                ftpbean.setDirectory(path); 
     
                System.out.println("Changement de répertoire OK");
     
     
     
                // listage du contenu du répertoire
                System.out.println("Affichage du contenu du répertoire et    transfert du premier fichier qui n'est pas un répertoire");
                FtpListResult flr = ftpbean.getDirectoryContent();
                // ftpbean.execute("ls");
     
               boolean transfertDone = false;
               while (flr.next()) {
                    String name = flr.getName();
                    System.out.println(name);
                    // si le fichier est le premier simple fichier (ni un répertoire 
                    // ni un lien) on le transfère
                    if ((flr.getType() == FtpListResult.FILE) && (!transfertDone)) {
                        ftpbean.getBinaryFile(name, localDirectory + File.separator + name);
                        transfertDone = true;
                        System.out.println("Fichier " + name + " transféré!");
                    }
                }
                ftpbean.close();
                System.out.println("Fin du listage du répertoire");
            } catch (IOException ex) {
                System.out.println("Une erreur de communication avec le serveur distant a eu lieu:");
                ex.printStackTrace();
            } catch (FtpException ex) {
                System.out.println("une erreur FTP a eu lieu:");
                ex.printStackTrace();
            }
     
     
     
        }
    }
    Maintenant je veux rajouter jute deux lignes pour exécuter un script sur cette même machine qui s'appelle XXX



    Runtime runtime = Runtime.getRuntime();
    Runtime.getRuntime().exec(new String[] { "titi.sh"} );
    Est-ce que il y a quelque chose que j'échappe encore?

    N-B : lire les lignes de la forme import <a href="ftp://ftp.FtpBean" target="_blank">ftp.FtpBean</a>;
    comme import ftp.FtpBean;

  4. #4
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Sauf que le FTP (aka File Transfert Protocol)ne te permet pas d'exécuter de commandes sur d'autres machines, il est prévu uniquement pour faire du transfert de fichiers, basta.

    Là ce que tu fais c'est ramener un script shell depuis une machine unix vers une machine windows et l'exécuter depuis un machine windows...

    De plus les users prévu pour le FTP ne possèdent en général que de très peu de droits.

    Enfin sous unix en général si on veut exécuter des scripts sur un machine distante, il faut passer par SSH (aka Secure SHell) (ou telnet ou n'importe quel autre protocole prévu à cet effet)


    Pour ton histoire de Runtime, c'est une classe de la JVM permettant de lancer des processus sur une machine locale....


    Va p't'être falloir revoir deux trois notions de réseau m'sieur
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  5. #5
    Débutant
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 496
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par sinok
    Sauf que le FTP (aka File Transfert Protocol)ne te permet pas d'exécuter de commandes sur d'autres machines, il est prévu uniquement pour faire du transfert de fichiers, basta.

    Là ce que tu fais c'est ramener un script shell depuis une machine unix vers une machine windows et l'exécuter depuis un machine windows...

    De plus les users prévu pour le FTP ne possèdent en général que de très peu de droits.

    Enfin sous unix en général si on veut exécuter des scripts sur un machine distante, il faut passer par SSH (aka Secure SHell) (ou telnet ou n'importe quel autre protocole prévu à cet effet)


    Pour ton histoire de Runtime, c'est une classe de la JVM permettant de lancer des processus sur une machine locale....


    Va p't'être falloir revoir deux trois notions de réseau m'sieur
    Bon d'accord. je vais y aller vers SSH, mais je n'arrive pas à trouver un exemple d'une application java ytilisant SSH.

    Est-ce que tu sais où je pourrais trouver des exemples (java SSH) ?

    Merci.

Discussions similaires

  1. Lancer un script PHP à partir d'une connexion FTP
    Par fveto dans le forum Composants VCL
    Réponses: 1
    Dernier message: 09/06/2015, 20h13
  2. Réponses: 1
    Dernier message: 02/08/2008, 18h45
  3. [URL] problème pour créer un url a partir d'une adresse relative
    Par luckyvae dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 04/10/2007, 11h37
  4. fonction pour lancer plusieurs scripts
    Par ricachu dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/08/2006, 15h33
  5. Comment ouvrir Word ou Acrobat Reader à partir d'une page web ?
    Par Kuuei dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 17/05/2006, 15h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo