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 :

Chemin d'accès juste mais Scanner impossible


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Par défaut Chemin d'accès juste mais Scanner impossible
    Mon appli génère des graphiques et pour cela elle va lire dans des fichiers texte des valeurs permettant la génération. Le chemin d'accès est dynamique car il y a un fichier par jour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    filePath = "/soleil/logs/stats/"+ yyyy + "/" + mm + "/" + dd + "/" + yyyy + "-" + mm + "-" + dd + "_Resumes.txt";	//Chemin d'acces au fichier contenant les valeurs
    Jusque la aucun problème n'est à déplorer le chemin d'accès est dans tous les cas juste.

    Le problème se présente lorsque je veux lire le fichier avec un scanner. Lorsque je lance manuellement l'appli avec la commande java -cp /usr/local/rrdtool Graph... (ou ... est remplacé par 2Sem, 1Mois, 3Mois ou 1An) il n'y a aucun problème.
    Mais ayant automatisé l'exécution des applis avec crontab, il semblerait que le scanner permettant de lire les fichiers ligne par ligne bug et ne veuille pas passer à la ligne suivante.

    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
     
    try {
    	Scanner scanner = new Scanner(new File(filePath));
    	System.out.println("SCANNER " + scanner.hasNext());  //J'obtiens false ici
    	try {
    		while (scanner.hasNextLine()) {
    			System.out.println("WHILE");
    			String line = scanner.nextLine();
    			for (int j = 0; j < nbLignes; j++) {	//Renseignement des differents tableaux
    				if (line.contains(tabDepots[j]) && !line.contains("carnica")) {	//Si la ligne contient la case du tableau
    					line = line.replace(" ", "");
    					line = line.replace("|", " ");
    					String tabline[] = line.split(" ");
    					tabVal[j][JourJ] = Double.parseDouble(tabline[4]);
    					tabFic[j][JourJ] = Integer.parseInt(tabline[7]);
    					tabScaleFiles[j][JourJ] = tabFic[j][JourJ] + (10 - (tabFic[j][JourJ] % 10)); //On prend comme echelle un nombre superieur
    					tabScaleData[j][JourJ] = (int)tabVal[j][JourJ] + (10 - ((int)tabVal[j][JourJ] % 10)); //On prend comme echelle un nombre superieur
    					System.out.println("**********");
    					System.out.println("TABVAL-" + tabVal[j][JourJ]);
    					System.out.println("TABFIC-" + tabFic[j][JourJ]);
    				}
    			}
    		}
    	} finally {
    		// On s'assure de fermer proprement le fichier
    		System.out.println("CLOSE SCANNER");
    		scanner.close();
    	}
    } catch (FileNotFoundException e) {
    	//Affichage d'un message d'erreur spécifiant que le fichier n'a pas été trouvé
    	System.err.println("(" + filePath + ") Fichier non trouvé initialisation des variables a 0");
     
    	for (int j = 0; j < nbLignes; j++) {	//Mise à zéro des différents tableaux
    		tabVal[j][JourJ] = 0;
    		tabFic[j][JourJ] = 0;
    		tabScaleFiles[j][JourJ] = 0;
    		tabScaleData[j][JourJ] = 0;
    		System.out.println("TABVAL-" + tabVal[j][JourJ]);
    		System.out.println("TABFIC-" + tabFic[j][JourJ]);
    	}
    }
    Serait-ce du à l'environnement d'exécution du crontab? Etant donné que c'est le seul cas ou les applis ne fonctionnent pas.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    toujours donner des répertoires absolus quand tu lances des applications avec crontab. Par exemple tappe /usr/bin/java et non "java" car le PATH de crontab n'est pas nécessairemetn le meme que celui de ton bash. Les .profile etc du user n'étant pas lancés.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Par défaut
    C'est justement ce que j'ai fait et je ne comprend pas pourquoi c'est le cas.


    voila le script et la partie du cron qui lance le script:
    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
    #!/bin/bash
     
    CLASSPATH="/usr/local/rrdtool/"
    JAVAPATH="/usr/java/jre1.6.0_14/bin/java"
     
    #Lancement de la génération des graphes
    $JAVAPATH -cp $CLASSPATH GraphPie
     
    ##########Graphiques des dépots
     
    $JAVAPATH -cp $CLASSPATH GraphGrid2Sem
    $JAVAPATH -cp $CLASSPATH GraphGrid1Mois
    $JAVAPATH -cp $CLASSPATH GraphGrid3Mois
    $JAVAPATH -cp $CLASSPATH GraphGrid1An
     
    ##########Graphiques des lignes
     
    $JAVAPATH -cp $CLASSPATH GraphGridLignes2Sem
    $JAVAPATH -cp $CLASSPATH GraphGridLignes1Mois
    $JAVAPATH -cp $CLASSPATH GraphGridLignes3Mois
    $JAVAPATH -cp $CLASSPATH GraphGridLignes1An
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    00 02 * * * /usr/local/rrdtool/LauncherGraphsJava.sh
    La ou je trouve cela étrange c'est que pour GraphPie il n'y a aucun problème, c'est peut etre du au fait qu'il n'ait besoin de lire qu'un seul fichier et que les autres en lisent plusieurs.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Quels sont les messages d'erreurs que tu as?

  5. #5
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Par défaut
    Aucun en fait le problème est que le scanner semble ne pas pouvoir lire les fichiers texte des que l'appli est lancée depuis le cron.

    J'ai joint les graphs celui sans les barres est celui que j'obtiens quand le crontab exécute et l'autre que j'exécute manuellement.

    De plus j'ai mis des println un peu partout pour voir d'ou vient le problème et j'obtiens:

    -Avec crontab:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /soleil/logs/stats/2009/08/17/2009-08-17_Resumes.txt
    SCANNERfalse
    -Manuellement:
    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
    /soleil/logs/stats/2009/08/18/2009-08-18_Resumes.txt
    SCANNERtrue
    WHILE
    WHILE
    ...
    WHILE
    WHILE
    **********
    TABVAL-0.0
    TABFIC-3
    WHILE
    **********
    TABVAL-0.0
    TABFIC-3
    WHILE
    Images attachées Images attachées   

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    est-il possible que le cron n'aie pas les droits d'accès sur le fichier, ou tout simplement que le ficheir soit vide? Je note qu'il ne s'agit pas du meme fichier dans les deux cas. Rajoute ceci, pour etre sur, au début de ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.printf("Scan du fichier <%s>. Existe? %b Can read? %b\n",filepath,new File(filepath).exists(), new File(filepath).canRead());

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 16/01/2017, 20h48
  2. Réponses: 2
    Dernier message: 08/09/2014, 15h24
  3. Réponses: 11
    Dernier message: 13/08/2013, 11h18
  4. Réponses: 1
    Dernier message: 22/04/2013, 13h28
  5. Réponses: 15
    Dernier message: 24/12/2012, 16h49

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