Salut à tous,
Alors voilà, la commande shutdown ne fonctionne correctement que lorsque le temps d'extinction est "distant" du temps actuel d'un multiple de 60 minutes ou d'une valeur inférieure à 60 minutes.
En gros s'il est 12:00
shutdown -h +1, +2, +3, ...., +60,+120,+180, etc... marcheront, mais pas +122 ou +183 par exemple
ainsi que shutdown -h 12:01, 12:02, ....13:00, 14:00, 15:00, etc...
Mais parfois c'est plus aléatoire et certaines valeurs entre 0 et 60 ne fonctionne pas
En fait dans le cas où ca ne marche pas, il n'y a pas de message broadcaster sur la console qui dit que le système va s'arrêter et effectivement l'arrêt ne fonctionne pas.
Apparemment la commande shutdown est fournie par sysvinit, ceci expliquerait cela ?
Assez embêtant tout de même, d'où pourrait venir cette perte de précision ?
[Shutdown] Problème avec l'horloge ? (résolu)
- LeCrayonVert
- Daikyu
- Messages : 81
- Inscription : ven. 30 juil. 2010, 12:17
- Localisation : France
[Shutdown] Problème avec l'horloge ? (résolu)
Dernière modification par LeCrayonVert le sam. 07 août 2010, 12:39, modifié 1 fois.
- LeCrayonVert
- Daikyu
- Messages : 81
- Inscription : ven. 30 juil. 2010, 12:17
- Localisation : France
Re: [Shutdown] Problème avec l'horloge ? (Résolu)
Bon en fait j'ai trouvé ...apparemment le message n'est pas broadcasté tout de suite il faut attendre le prochain multiple pour qu'il affiche...logique en fait.
- LeCrayonVert
- Daikyu
- Messages : 81
- Inscription : ven. 30 juil. 2010, 12:17
- Localisation : France
Re: [Shutdown] Problème avec l'horloge ? (résolu)
Pour ceux que ca intéresse l'explication d'après les sources :
Pour remédier à cela, il suffit de remplacer dans le fichier source shutdown.c à la ligne 699 (version 2.86 de sysvinit) :
par
Code : Tout sélectionner
static int needwarning(int wt)
{
int ret;
if (wt < 10)
ret = 1;
else if (wt < 60)
ret = (wt % 15 == 0);
else if (wt < 180)
ret = (wt % 30 == 0);
else
ret = (wt % 60 == 0);
return ret;
}
Code : Tout sélectionner
if (wt<15 && !needwarning(wt)) warn(wt);
Code : Tout sélectionner
if (!needwarning(wt)) warn(wt);