Page 1 sur 1

[Shutdown] Problème avec l'horloge ? (résolu)

Publié : sam. 07 août 2010, 10:32
par LeCrayonVert
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 ?

Re: [Shutdown] Problème avec l'horloge ? (Résolu)

Publié : sam. 07 août 2010, 12:30
par LeCrayonVert
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.

Re: [Shutdown] Problème avec l'horloge ? (résolu)

Publié : lun. 09 août 2010, 12:48
par LeCrayonVert
Pour ceux que ca intéresse l'explication d'après les sources :

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;
}
Pour remédier à cela, il suffit de remplacer dans le fichier source shutdown.c à la ligne 699 (version 2.86 de sysvinit) :

Code : Tout sélectionner

if (wt<15 && !needwarning(wt)) warn(wt);
par

Code : Tout sélectionner

if (!needwarning(wt)) warn(wt);