Question

Je suis en train d'écrire un moniteur de système pour Linux et que vous souhaitez inclure certaines fonctionnalités de chien de garde. Dans le noyau, vous pouvez configurer le chien de garde pour continuer même si / dev / chien de garde est fermé. Autrement dit, si mon démon sort normalement et ferme / dev / chien de garde, le système serait encore réamorcer 59 secondes plus tard. Cela peut ou peut ne pas être un comportement souhaitable pour l'utilisateur.

Je dois faire mon démon au courant de ce paramètre, car il influencera la façon dont je gère SIGINT. Si le réglage est activé, mon démon aurait besoin de (de préférence) ordonner un arrêt correct à la sortie ou (au moins) avertir l'utilisateur que le système va redémarrer bientôt.

Quelqu'un sait-il d'une méthode pour obtenir ce paramètre depuis l'espace utilisateur? Je ne vois rien dans sysconf () pour obtenir la valeur. De même, je dois être en mesure de dire si le chien de garde du logiciel est activé pour commencer.

Modifier

Linux fournit une interface très simple chien de garde. Un processus peut ouvrir / dev / chien de garde, une fois que le dispositif est ouvert, le noyau commencera 60 secondes compte à rebours pour redémarrer à moins que certaines données sont écrites dans ce fichier, auquel cas les ré-ensembles d'horloge.

Selon la façon dont le noyau est configuré, la fermeture de ce fichier peut ou ne peut pas arrêter le compte à rebours. De la documentation:

  

Le chien de garde peut être arrêté sans   provoquer un redémarrage si le dispositif   / Dev / chien de garde est fermé correctement,   à moins que votre noyau est compilé avec   l'option CONFIG_WATCHDOG_NOWAYOUT   activé.

Je dois être en mesure de dire si CONFIG_WATCHDOG_NOWAYOUT a été créé à partir d'un démon de l'espace utilisateur, afin que je puisse gérer l'arrêt dudit démon différemment. Autrement dit, si ce paramètre est élevé, simple:

# /etc/init.d/mydaemon stop

... rebootiez le système en 59 secondes, parce que rien écrit à / dev / chien de garde plus longtemps. Donc, si son jeu élevé, mon gestionnaire pour SIGINT a besoin de faire des choses supplémentaires (par exemple avertir l'utilisateur au moins).

Je ne peux pas trouver un moyen d'obtenir ce paramètre depuis l'espace utilisateur :( Toute aide est appréciée.

Était-ce utile?

La solution

AHA! Après avoir creusé dans la linux/watchdog.h et drivers/watchdog/softdog.c du noyau, je suis en mesure de déterminer les capacités de l'interface ioctl() de softdog. En regardant les capacités qu'il annonce un dans struct watchdog_info:

static struct watchdog_info ident = {
                .options =              WDIOF_SETTIMEOUT |
                                        WDIOF_KEEPALIVEPING |
                                        WDIOF_MAGICCLOSE,
                .firmware_version =     0,
                .identity =             "Software Watchdog",
        };

ne soutenir une magie près que (semble) CONFIG_WATCHDOG_NOWAYOUT prioritaire. Ainsi, lors de la résiliation normalement, je dois écrire un seul char « V » à /dev/watchdog puis fermer, et la minuterie arrête le comptage.

Un ioctl() simple sur un descripteur de fichier à /dev/watchdog demander WDIOC_GETSUPPORT permet de déterminer si cette option est activée. Code Pseudo:

int fd;
struct watchdog_info info;

fd = open("/dev/watchdog", O_WRONLY);
if (fd == -1) {
   perror("open");
   // abort, timer did not start - no additional concerns
}

if (ioctl(fd, WDIOC_GETSUPPORT, &info)) {
    perror("ioctl");
    // abort, but you probably started the timer! See below.
}

if (WDIOF_MAGICCLOSE & info.options) {
   printf("Watchdog supports magic close char\n");
   // You have started the timer here! Handle that appropriately.
}

Lorsque vous travaillez avec des chiens de garde du matériel, vous pouvez ouvrir avec O_NONBLOCK si ioctl() pas open() blocs (détection donc une carte animée).

Si WDIOF_MAGICCLOSE est pas pris en charge, il faut simplement supposer que le chien de garde souple est configuré avec NOWAYOUT. Rappelez-vous, ouverture l'appareil démarre correctement le compte à rebours. Si tout ce que vous faites est le sondage pour voir si elle prend en charge la magie à proximité et il le fait, puis magie le fermer . Sinon, assurez-vous de composer avec le fait que vous avez maintenant un chien de garde en cours d'exécution.

Malheureusement, il n'y a aucun moyen de savoir avec certitude sans réellement commencer, du moins pas que je pouvais trouver.

Autres conseils

un garde de chien de garde contre le système de verrouillage dur, que ce soit à cause d'un crash du logiciel, ou de défaillance matérielle.

ce que vous avez besoin est un démon de surveillance du démon (dmd). vérifier 'Monit'

Je pense que les pilotes de périphériques de surveillance sont vraiment destinés à être utilisés sur des plateformes embarquées (ou les moins bien contrôlées) où les développeurs auront le contrôle dont le noyau est utilisé.

Cela pourrait être considéré comme un oubli, mais je pense que ce n'est pas.

Une autre chose que vous pouvez essayer, si le chien de garde a été construit comme un module chargeable, le déchargement, il sera probablement annuler l'arrêt?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top