Crontab - pb changement d'heure

JM_contreband Messages postés 3 Statut Membre -  
dubcek Messages postés 19021 Statut Contributeur -
Bonjour à tous,

Je travaille dans une entreprise ferroviaire française et nous avons rencontré un problème lors du passage à l'heure d'été : Les scripts qui étaient cronés entre 2:00:00 et 3:00:00 se sont lancés simultanément à 3:00:00... Dont plusieurs fois le même processus, ce qui a créé un gros souci sur notre système central.

Nous souhaiterions que ces scripts cronés entre 2:00:00 et 3:00:00 soient tout simplement ignorés. Par exemple, nous avons un process qui tourne toutes les 15 minutes, nous voudrions que lors d'un changement d'heure d'été, il tourne à 1:20:00, puis 1:35:00, 1:50:00 et 3:05:00 (donc bien tous les quarts d'heure). Ce 25 mars 2007, il a tourné 4 fois simultanément à 3:00:00, puis de nouveau à 03:05:00...

Connaissez vous une option à insérer en crontab pour permettre d'ignorer ces process lors d'un changement d'heure ?

Je m'excuse, mais il m'est totalement impossible de copier notre crontab sur un forum public, ce qui aurait peut-être pu vous aider...

D'autre part, nous n'avons pas de problème pour les retours arrières (changement d'heure d'hiver), pour ceux qui pourraient s'en inquiéter...

Merci pour vos réponses !!!
A voir également:

5 réponses

reg
 
0
dubcek Messages postés 19021 Statut Contributeur 5 637
 
Hi
Le problème ne se posant qu'une fois par année, le plus simple me semble de modifier la crontab la veille et de la remodifier le lendemain. Ce qui n'exclu pas une solution technique mais ...
0
Manu
 
Bonjour,

deux pistes :

- au début de la commande déclenchée par cron, vérifier que la commande n'est pas déjà déjà active dans un autre process. Cela peut nécessiter la création d'un fichier de verrouillage. Cela peut aussi conduire à une exécution parasite à 3h00.

- au début de la commande, vérifier que l'heure est l'une des heures normales de lancement (par exemple refuser tous les lancements entre 3h00 et 3h04 si la commande ne doit s'exécuter qu'à h+5mn, h+20mn etc comme dans votre exemple).

(je décline toute responsabilité si ces méthodes conduisent à programmer une collision)

Manu
0
JM_contreband Messages postés 3 Statut Membre
 
Merci à vous pour vos réponses !

La solution que nous avons proposée était d'intervenir la veille, mais cette solution a été refusée par l'équipe d'exploitation. La solution de dubcek, qui me semble aussi la plus simple, ne convient donc pas...

La première des deux pistes proposées par Manu est déjà en partie implémentée dans notre système : a commande qui tourne teste au départ si elle n'est pas déjà en train de tourner, mais le fait qu'elle se lance simultanément a déjoué ce contrôle. En revanche, ce contrôle se fait actuellement sans création de fichier temporaire type .commande_en_cours. Peut-être que cela solidifierait le contrôle. A explorer donc !

La seconde des pistes proposée par Manu est celle que nous allons explorer la première : empêcher le lancement du script entre 3h et 3h04.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 19021 Statut Contributeur 5 637
 
Il est possible de mettre dans cron la veille la modification de la crontab pour passer le changement d'heure !! :-)
0
JM_contreband Messages postés 3 Statut Membre
 
Dubcek,

Je voudrais que tu ailles plus loin lorsque tu dis :

Il est possible de mettre dans cron la veille la modification de la crontab pour passer le changement d'heure !! :-)

Comment croner aujourd'hui la modification de la crontab pour tous les changements d'heure à venir, sachant que le changement d'heure change de date tous les ans ?

S'il faut une intervention manuelle pour croner la modification de la crontab tous les ans, on reviendra à un refus de la part des exploitants...
0
dubcek Messages postés 19021 Statut Contributeur 5 637
 
J'ai pas de système Unix pour tester, mais sachant que le changement à lieu à 2h le dernier
dimanche d'octobre qui a 31 jours,
je tourne un cron le 25 10 à 0h15 qui lance une commande : at 0030 sunday < script_qui_modifie_cron
cette commande s'exécutera le dernier dimanche d'octobre.
A moins qu'une faille m'ait échappé.
0