salut,
j'ai une classe qui fait appelle à un script de backup, comment dois je faire pour que mon programme puisse s'exécuter, en tâche de fond, tout les jours à minuit.
salut,
j'ai une classe qui fait appelle à un script de backup, comment dois je faire pour que mon programme puisse s'exécuter, en tâche de fond, tout les jours à minuit.
Ce n'est pas un problème Java mais plutôt pour ton système d'exploitation. Tu doit le paramétrer pour qu'il démarre ton programme tout les soir a minuit. Quel est ton OS?
Sinon tu peux toujours garder le programme java en résident pour qu'il déclenche une action a minuit. Mais ce n'est pas vraiment propre.
j'ai un Windows XP, et je sais que je peux planifier une tâche, mais c'est pas l'objectif, je suis entraine d'étudier comment je peux faire un programme en java qui s'exécute systématiquement, et du fait que je viens de réaliser un script qui réalise une sauvegarde tout les jours, puis j'ai réussi à exécuter ce script à partir d'un programme java, je me suis dit que je peux faire de façon que se programme s'exécute systématiquement.
je me suis documenté un peu et j'ai tombé sur les threads, puis sur le task timer mais c'est toujours ambigu pour moi, quelqu'un peut m'expliquer ce que je dois faire.
merci
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 public class ExecuteScript extends Thread { public void run() { String[] cmd = { "C:\\cygwin\\bin/sh.exe", "C:\\ConfAirSync/script1.sh" }; try { Process p = Runtime.getRuntime().exec(cmd); // p.waitFor(); p.getOutputStream().close(); p.getInputStream().close(); BufferedReader reader = new BufferedReader(new InputStreamReader(p.getErrorStream())); String line = ""; try { while((line = reader.readLine()) != null) { // Traitement du flux d'erreur de l'application si besoin est System.out.println(line); Thread.sleep(500); } } finally { reader.close(); } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { ExecuteScript e =new ExecuteScript(); e.run(); } }
Si tu veux programmer une Tache a effectuer a intervalle régulier c'est les classes Timer et TimerTask qui t'intéressent.
Je suis pas un expert des manipulation de Date, il doit y avoir un manière plus propre de calculer minuit le lendemain, mais ça devrait fonctionner.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public static final int DAY_LENGTH = 1000 * 60 * 60 * 24; ... Date now = new GregorianCalendar(Locale.getDefault()).getTime(); Date tomorrow = new Date((now.getTime()/DAY_LENGTH + 1) * DAY_LENGTH); new Timer("Planificateur", true).scheduleAtFixedRate(new TimerTask() { public void run() { System.out.println("Lancement"); } }, tomorrow, DAY_LENGTH);
A noter le paramètre true dans le constructeur indique que si le programme arrive a son terme, le Timer ne prolongera pas sa durée de vie.
Partager