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 :

Arrêt automatique d'un programme batch et reprise .


Sujet :

Langage Java

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2007
    Messages : 358
    Points : 135
    Points
    135
    Par défaut Arrêt automatique d'un programme batch et reprise .
    Bonjour à tous,

    Je voudrais savoir est ce qu'il y a une possibilité de pouvoir arrêter un programme batch sous java de façon automatique, si la durée d'exécution dépasse une certaine valeur ?

    J'ai un programme java qui télécharge automatiquement un fichier via FTP, je souhaite stopper ce programme de façon automatique si la durée du téléchargement est trop importante et de pouvoir le ré-exécuter après cette interruption . Ce programme java est appelé par un fichier d'extension .bat qui lui même est appelé par le planificateur de tâches de Windows .

    Voici la version de Java que j'utilise : Java 5 sous Windows 2000 Server.

    Cordialement .

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut
    Il est tout à fait possible de définir un timeout, il faut gérer cela dans l'application Java. Pour ce qui est de relancer l'application, ça dépend du comportement souhaité.

    Pour définir un timeout, le mieux est de lancer le téléchargement dans un Thread défini comme démon, puis, dans le Thread principal, vérifier en bouche que le timeout n'est pas atteint. Si c'est le cas, il suffit de faire un simple break pour quitter la boucle est laisser le Thread principal se terminer. Le démon s'arrêtera de lui-même lorsque le Thread principal se terminera. Vous pouvez redéfinir la méthode finalize() du Thread démon si vous voulez réaliser un traitement de fin. Une autre solution est de terminer l'application sauvagement avec un System.exit().

    Pour ce qui est de reprendre le téléchargement, cela peut s'avérer un peu plus complexe. En fait, je ne sais pas si le protocole ftp permet de commencer un téléchargement à un point aléatoire, ce qui vous permettrait de reprendre l'opération là où elle s'est arrêtée. Par ailleurs, si vous voulez que le téléchargement soit relancé automatiquement, ça va compliquer l'affaire, car du coup, vous ne devez pas terminer le Thread principal de votre appli.

    Une solution serait de lancer un premier programme qui contrôle le timeout et qui lance un deuxième programme qui effectue le téléchargement. La raison pour laquelle il est préférable de recourir à deux programmes est que l'arrêt du téléchargement d'un fichier peut s'avérer capricieux, et que les deux seules solutions fiables à ma connaissance sont soit d'utiliser un démon, soit de faire un System.exit(). Dans les deux cas, le programme s'arrête et du coup vous ne pouvez pas gérer la reprise automatique.

    Voilà, bon courage.

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2007
    Messages : 358
    Points : 135
    Points
    135
    Par défaut
    Bonsoir,

    Je vous remercie pour votre réponse, cependant, serait t'il possible d'avoir un exemple d'utilisation de threads (cela me parait nouveau pour moi) dans le cas où un thread télécharge un fichier et un autre qui contrôle la durée de téléchargement ? Ce dernier arrêterai le téléchargement en cas de dépassement de durée.

    Cordialement .

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut
    Voici à quoi cela pourrait ressembler :
    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
     
    private static final long TIMEOUT = 10000;//10 secondes
     
    public static void main(String[] args) {
    	Thread telechargement = new Thread() {
    		@Override
    		public void run() {
    			//téléchargement du fichier
    		}
    	}
    	telechargement.setDaemon(true);//le Thread de téléchargement est défini comme démon
    	telechargement.start();//lancement du téléchargement
     
    	long end = System.currentTimeMillis() + TIMEOUT;
     
    	//on boucle tant que le timeout n'est pas écoulé
    	while (end > System.currentTimeMillis()) {
    		Thread.sleep(1000);//on attend un seconde
    	}
     
    	//lorsque le Thread principal se termine, le démon se termine
    }
    Sinon, si vous n'avez jamais codé de Thread, sachez que le code écrit dans la méthode run() est exécuté lors de l'appel de la méthode start(). C'est donc dans la méthode run() que vous devez écrire votre code de téléchargement du fichier.

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2007
    Messages : 358
    Points : 135
    Points
    135
    Par défaut
    Je vous remercie et vais me débrouiller à partir de l'exemple que vous m'avez donné et reviendrai vers vous en cas de problème .

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

Discussions similaires

  1. Batch pour planifier l'arrêt automatique de l'ordinateur
    Par djocin dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 25/09/2012, 20h00
  2. programmer l'arrêt automatique de mon PC (Gnome)
    Par dino ortolani dans le forum SUSE
    Réponses: 2
    Dernier message: 24/03/2009, 21h10
  3. comment programmer un arrêt automatique de windows 2003 server
    Par dj_techno dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 24/01/2009, 16h21
  4. [VB6]Aide pour systeme de MAJ automatique d'un programme
    Par Tyrael62 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 28/01/2006, 06h44
  5. [Windows XP][Démarrage]Démarrage automatique d'un programme
    Par Jean Claude90 dans le forum Windows XP
    Réponses: 5
    Dernier message: 02/03/2005, 13h55

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