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

Langage Java Discussion :

Java et commande système


Sujet :

Langage Java

  1. #21
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 176
    Points : 124
    Points
    124
    Par défaut
    Bonjour,

    J'ai aussi un problème avec la classe runtime.

    En fait je veux faire un cvs checkout a partir d'un programme java mais cela ne marche pas, cela ne me crée pas les fichier relatif au checkout.

    ma commande est du type :
    r.exec("cvs -d /home/Ref/ checkout -d /home/moi/Desktop/workspace monmodule");

    Est ce que vous avez une idée d'où vient le problème?

    Merci.

  2. #22
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par diamonds
    Comment puis-je vérifier si l'utilisateur apache peut exécuter ce script ? est-ce l'essayer avec un classique http://..... ?
    Tu lis mes messages ??? Cf. le premier que j'ai posté :

    Citation Envoyé par _Mac_
    pour tester, il faut se connecter sur le serveur avec l'utilisateur apache et exécuter la commande
    Citation Envoyé par diamonds
    Comment l'administrateur du système peut vérifier si c'est le root qui lance Tomcat ou si c'est un autre utilisateur ?
    C'est son boulot de savoir ce genre de chose. Comment fait-il pour lancer Tomcat ? Avec quel utilisateur lance-t-il la commande ? Sinon, pour le savoir, faut faire un "ps -ef | grep java" et là t'as toutes les commandes java qui tourne sur le système qui s'affichent. L'utilisateur apparaît en début de ligne.

    Citation Envoyé par diamonds
    Non, le chemin du script ne dois pas apparaitre dans les URL, parcontre il va se trouver quelque part dans le code source de l'application. en l'occurence la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec...
    Ca me paraît normal, mais pour des raisons de flexibilité, je pense que c'est préférable de mettre au moins le répertoire où se trouve le script dans un paramètre de l'application : si ce répertoire doit changer pour une raison inconnue, c'est du simple paramétrage, t'as pas à recompiler l'appli.

    Citation Envoyé par diamonds
    Je ne comprends pas ce que tu veux dire par le flag x. ce script je lui donnerais les droits d'exécution suivants : x pour le owner, pour le groupe, et aussi pour les autres.
    Pourquoi pas. Je voulais juste dire que si tu mets le script dans ton WAR, il ne sera pas exécutable (pas de flag x pour personne).

    Citation Envoyé par diamonds
    Ce userid et ce mot de passe vont se trouver quelques part dans le code source.
    Ca, je comprends pas : t'en n'as pas besoin dans l'appli du mot de passe si tu sais que c'est le même utilisateur système que Tomcat qui doit appeler ce script... Et même si tu dois changer d'utilisateur, je pense que c'est mieux de passer par un truc du style sudo pour appeler la commande car ça t'évitera d'avoir à écrire un mot de passe en clair quelque part.

    Citation Envoyé par diamonds
    Pas sur de bien comprendre ici.
    Supposons que mon .war se trouve sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /machin/webapps/monapplication.war
    et le script shell se trouve sur
    Est-ce que la ligne java qui va lancer le script sera de la forme suivante ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec("/rep1/rep2/script.sh");
    si oui, si un jour le nom du script change ou bien si son emplacement change, on va devoir faire des modifications dans cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec("/rep1/rep2/script.sh");
    pour moi : parametre = "/rep1/rep2/script.sh" est-ce exact ?
    il y a quelque chose que j'échappe.

    Diamonds
    Si, c'est tout à fait ça. Ton paramètre vaut bien "/rep1/rep2/script.sh". Ton appli récupère ce paramètre et le passe Runtime.getRuntime().exec(). Mais qu'on se comprenne bien : quand je parle de paramètre, je ne parle pas d'une simple variable dans ton code Java : c'est soit une valeur qui se trouve dans un fichier de config genre properties, soit une entrée d'environnement ou un init param de ton servlet (les 2 derniers sont préférables car modifiables post déploiement directement depuis la console d'admin).

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  3. #23
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par Anubis
    Est ce que vous avez une idée d'où vient le problème?
    T'as un message d'erreur ? Parce que comme ça, pas trop d'idée. La seule qui me vient à l'esprit c'est qu'il est possible qu'il ne trouve pas la commande cvs parce qu'elle ne se trouve pas dans son path. T'as essayé en mettant le chemin complet vers la commande cvs ? Genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    r.exec("/usr/bin/cvs -d /home/Ref/ checkout -d /home/moi/Desktop/workspace monmodule");

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  4. #24
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 176
    Points : 124
    Points
    124
    Par défaut
    avec /usr/bin/cvs cela ne amrche pas mieux.
    Mais c'est vrai je n'ai regardé que le flux normal et pas celui d'erreur je test ça et je vous dis.

    edit: en fait j'ai trouvé.
    Dans le flux de sorti d'erreur il me dit qu'il n'arrive pas a parser la date que je founi pour mon checkout.
    merci de ton aide.

  5. #25
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par Anubis
    Mais c'est vrai je n'ai regardé que le flux normal et pas celui d'erreur je test ça et je vous dis.
    Sans commentaire...

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  6. #26
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 176
    Points : 124
    Points
    124
    Par défaut
    heu là je ne comprend pas:
    je construit ma commande dans une chaine de caractère comme elle devrait être dans un terminal. je la fais afficher je la copie, je la met dans un terminal elle marche impec.

    Je la lance avec runtime il me répond Can't parse date/time: `"2004-07-13'

    Est ce que java code les caractères " d'un façon particulière qui n'est pas reconnu par le terminal?

    edit: J'ai trouvé la solution, vous la voulez? :p

    Bon en fait j'ai découpé ma commande en un tableau et je l'ai passé à exec et apparement cela marche.

  7. #27
    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 thibaut
    Quand tu fait Runtime.getRuntime.exec(); tu récupère un objet de type Process.

    Et tu dois faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Process process = Runtime.getRuntime.exec();
    InputStream in = process.getInputStream();
    Et lire sur le flux InputStream...
    Comment lire cette donnée sur le inputstream

    mettons que j'ai un textarea sur ma page et je veux lui affecter la sortie de la commande "dir" comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Runtime runtime = Runtime.getRuntime();
           Process process = Runtime.getRuntime().exec(new String[] { "dir" , "C:\\" } );
           InputStream in = process.getInputStream();
     
           textArea1.setValue = in....
    Merci.

  8. #28
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Voici un tutoriel sur le package java.io (package destiné à la manipulation des flux) qui devrais t'aider .
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  9. #29
    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 Anubis
    heu là je ne comprend pas:
    je construit ma commande dans une chaine de caractère comme elle devrait être dans un terminal. je la fais afficher je la copie, je la met dans un terminal elle marche impec.

    Je la lance avec runtime il me répond Can't parse date/time: `"2004-07-13'

    Est ce que java code les caractères " d'un façon particulière qui n'est pas reconnu par le terminal?

    edit: J'ai trouvé la solution, vous la voulez? :p

    Bon en fait j'ai découpé ma commande en un tableau et je l'ai passé à exec et apparement cela marche.
    Comment tu as fais pour lire le flux inputstream ?

  10. #30
    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
    Ca, je comprends pas : t'en n'as pas besoin dans l'appli du mot de passe si tu sais que c'est le même utilisateur système que Tomcat qui doit appeler ce script... Et même si tu dois changer d'utilisateur, je pense que c'est mieux de passer par un truc du style sudo pour appeler la commande car ça t'évitera d'avoir à écrire un mot de passe en clair quelque part.


    Bon d´accord. Regardons ceci :

    je veux exécuter un script qui contient la commande "ls" pour afficher.

    sur ma page web je fais ceci dans le code d'un bouton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public String button1_action() throws IOException {
     
           Runtime runtime = Runtime.getRuntime();
           Process process = Runtime.getRuntime().exec(new String[] { "/XXX/ls" , "/home" } );
           InputStream in = process.getInputStream();
     
          // textArea1.setValue = in.getClass().;
     
          return null; 
        }
    J'ai mettons 3 serveur unix (A, B, C)

    Sans utiliser un login et un mot de passe, comment puis-je dire que je veux lancer le script qui se trouve sur le serveur B et non pas A ou C?

    Le répertoire /home et /XXX se trouve effectivement tous les deux sur la machine B

    Le hic c'est que maintenant je fais encore le développement sur mon pc personnel. Alors il me semble que je dois me loguer au serveur unix (en l'occurence B) d'une manière ou d'une autre.

    Une fois le développement sera fini, je metterais à ce moment là le .war sur le serveur unix B (et peut-être dans ce cas, je n'aurais pas besoin de me loguer)

    Peux tu détailler un peu sur le trux "sudo"

    Merci.

  11. #31
    Rédacteur

    Avatar de loka
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    2 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 672
    Points : 5 509
    Points
    5 509
    Par défaut
    Bonjour,

    Je me permet d'utiliser ce sujet pour mon problème qui reste dans le sujet ^^

    Mon appli tourne sous Windows et je souhaite que l'execution de mon programme execute un 2em programme dans une nouvelle console.
    Mon problème se trouve dans l'ouverture de cette nouvelle console.

    en gros pour le moment voici la partie qui pose problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Runtime runtime = Runtime.getRuntime();
    Process process = runtime.exec("java -cp ./;lib/soap.jar;lib/mail.jar;lib/activation.jar;lib/xerces.jar AffichageChat " + pseudo);
    Je souhaite donc executer (2em ligne) mon programme GetSentence MAIS dans une autre console.

    Si quelqu'un a une idée de comment faire

    EDIT : J'ai réglé mon problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Runtime runtime = Runtime.getRuntime();
    Process process = runtime.exec(new String[] { "cmd.exe", "/C", "start java -cp ./;lib/soap.jar;lib/mail.jar;lib/activation.jar;lib/xerces.jar AffichageChat " + pseudo});

Discussions similaires

  1. Commandes systèmes avec pl/pgsql
    Par Takayanagi dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 11/08/2006, 12h36
  2. commandes système
    Par ghostdog dans le forum C
    Réponses: 13
    Dernier message: 27/12/2005, 16h03
  3. exécuter une commande système à partir de sqlplus?
    Par c_moi_c_moi dans le forum Oracle
    Réponses: 24
    Dernier message: 08/11/2005, 15h11
  4. [Process] éxecution d'une commande système
    Par alex'l dans le forum API standards et tierces
    Réponses: 12
    Dernier message: 13/09/2005, 17h29
  5. Commande Système
    Par siaoly dans le forum Langage
    Réponses: 5
    Dernier message: 14/07/2005, 00h25

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