Principes de base de l’accès cellulaire à distance : chiens de garde

Lorsque nous parlons de machines distantes, nous entendons parfois vraiment à distance, au-delà des domaines des réseaux câblés qui peuvent fournir Internet. Dans ces cas, l’accès cellulaire à distance est souvent la voie à suivre. Jusqu’à présent, nous avons exploré les aspects matériels et logiciels nécessaires pour contrôler une machine à distance via une connexion cellulaire.

Cependant, les choses peuvent mal tourner et vont mal. Lorsque cette machine distante se déconnecte, demander à quelqu’un sur place de la redémarrer peut être extrêmement difficile et coûteux. Pour ces situations, ce que vous voulez, c’est un moyen de remettre les choses en marche, idéalement automatiquement. Ce que vous recherchez, c’est une minuterie de surveillance !

Chiens de garde

Le concept d’une minuterie de surveillance est simple. Lorsqu’il est connecté à un système et activé, le minuteur de surveillance commence le décompte à partir d’un temps prédéfini. Le système ou l’ordinateur embarqué est alors chargé d’envoyer un signal « kick » au chien de garde à intervalles réguliers. Cela réinitialise le chien de garde à sa valeur de temps maximale et le compte à rebours recommence. Si le « kick » n’est pas reçu avant que le temporisateur du chien de garde n’atteigne zéro, le chien de garde redémarre le système.

Une simple minuterie de surveillance.

Il est important d’avoir le bon intervalle de surveillance. Réglez-le trop court, et un système fortement chargé peut ne pas répondre avec un démarrage à temps et un redémarrage inutile sera provoqué. Réglez-le trop longtemps et le système pourrait être en panne pendant une période importante avant que le chien de garde ne remette les choses en marche. Une analyse minutieuse du système et de son comportement approprié est nécessaire pour régler cela de manière appropriée.

C’est un moyen pratique de gérer les plantages, les paniques du noyau et les blocages du système sur une machine distante. Plutôt que d’avoir à envoyer un technicien pour appuyer sur le bouton de réinitialisation, la machine peut redémarrer elle-même lorsqu’elle est bloquée. Les minuteries de surveillance sont cruciales dans les applications où l’envoi d’un humain pourrait coûter des milliers de dollars, voire être impossible, comme dans les satellites et autres applications spatiales.

Un temporisateur de chien de garde à plusieurs étapes, qui prend des mesures correctives à son tour avant d’effectuer un cycle d’alimentation complet de la machine cible. Si le système parvient à déclencher un signal de coup de pied après le déclenchement de l’étape 1 ou de l’étape 2, le système se réinitialise en fonctionnement normal.

Des conceptions plus complexes sont également possibles. Les temporisateurs de surveillance à plusieurs étages impliquent plusieurs temporisateurs mis en cascade en série. Dans une telle conception, lorsque le premier chien de garde expire après n’avoir pas reçu de « kick », il prend une action corrective et démarre une deuxième minuterie. Si cela ne rectifie pas la situation, la deuxième minuterie finira par expirer, déclenchant une autre action corrective, et ainsi de suite, jusqu’à ce que toutes les étapes se soient déclenchées. Cela peut être utile pour des applications plus complexes. La minuterie de la première étape pourrait instituer une simple commande de suppression de processus sur un serveur, la seconde une commande d’arrêt du logiciel sur le système d’exploitation, tandis que la troisième pourrait exécuter une réinitialisation matérielle complète avec un cycle d’alimentation.

Comment puis-je en implémenter un, cependant?

Les minuteurs de surveillance sont essentiels dans les systèmes spatiaux comme le Curiosity Rover.

La mise en place d’un chien de garde sur un système donné dépend fortement de l’application en question. Une ventilation exhaustive des conceptions de chiens de garde spécifiques dépasse le cadre de cet article. Au lieu de cela, nous allons examiner quelques pièges et décrire quelques cas différents qui mettent en évidence les différentes portées des conceptions de chiens de garde.

Pièges

Notez que ces cas font tous référence à des chiens de garde matériels appropriés. Idéalement, pour une robustesse maximale, le chien de garde doit être un élément matériel entièrement séparé capable de redémarrer le système principal d’intérêt. Certains microcontrôleurs et SoC incluent des chiens de garde internes qui fonctionnent avec différents niveaux d’indépendance, et ceux-ci peuvent également être utilisables. Cependant, ils doivent généralement être déclenchés de manière appropriée par la boucle de code principale. L’utilisation d’une interruption pour déclencher un chien de garde peut être dangereuse. La boucle principale peut planter mais tant que l’interruption se déclenche, le chien de garde ne réinitialisera jamais le système.

Il est également important de noter que les « chiens de garde des logiciels » sont souvent tout sauf. Par exemple, créer un processus pour surveiller d’autres processus sur un système informatique peut être utile. Il peut détecter un large éventail de défauts et de problèmes mineurs et redémarrer ces autres processus si nécessaire. Cependant, si un autre processus plante toute la machine ou crée un problème de niveau inférieur tel qu’une panique du noyau, le chien de garde du logiciel sera impuissant à agir. En règle générale, un chien de garde approprié doit être largement indépendant du système qu’il surveille.

Étude de cas 1 : Moniteur de réservoir construit à la maison

Disons que vous déployez un projet Raspberry Pi homebrew loin de chez vous pour surveiller les niveaux dans quelques réservoirs d’eau. Il n’y a rien de critique à la mission, et cela ne risquera pas non plus de mettre la vie ou l’intégrité physique en danger si le système tombe en panne. Cependant, le système est alimenté par batterie avec une charge solaire, et vous voulez éviter d’avoir à conduire pour redémarrer le système s’il y a des problèmes lorsque les niveaux de puissance deviennent faibles ou si quelque chose d’autre provoque un crash.

Dans ce cas, une solution simple peut supprimer beaucoup de maux de tête sans trop de complexité supplémentaire. Quelque chose d’aussi simple qu’un Arduino Uno ou similaire pourrait être installé pour implémenter un chien de garde assez facilement. Le Raspberry Pi peut être configuré pour envoyer des impulsions GPIO ou des messages série à l’Arduino pour indiquer qu’il fonctionne toujours correctement. Si aucun signal n’est reçu dans un laps de temps défini, l’Arduino peut redémarrer le Raspberry Pi en coupant simplement l’alimentation avec un relais. Cette période peut être de quelques minutes, heures ou même plus si le système n’est pas critique. L’astuce n’est pas de le rendre trop court, sinon si le système est temporairement fortement chargé, le chien de garde peut expirer bien que le système ne se soit pas réellement écrasé.

Avoir un Arduino dans le système pourrait également apporter d’autres avantages. Il pourrait envoyer des commandes au Raspberry Pi pour s’arrêter en toute sécurité au cas où la tension de la batterie commencerait à baisser. De plus, il pourrait commander des redémarrages progressifs réguliers du Raspberry Pi à des intervalles quotidiens ou hebdomadaires pour éviter tout problème potentiel dans les processus qui pourraient se bloquer pendant de longues périodes.

J’ai mis en place des systèmes similaires sur des robots mobiles sur le terrain, et ils peuvent fonctionner étonnamment bien. Il est toutefois important de s’assurer que le chien de garde fonctionne correctement. Par exemple, un processus principal sur le Raspberry Pi pourrait rester bloqué sans arrêter l’ensemble du système. Si le processus de service de surveillance responsable de la signalisation de l’Arduino est capable de continuer de manière indépendante, le système restera sous tension malgré le fait que le processus principal ne fonctionne plus. La solution consiste à demander au service de surveillance de vérifier que les autres processus fonctionnent correctement avant d’envoyer le signal de kick au chien de garde externe. Si vous écrivez tout votre propre code, c’est facile à faire ! Cependant, vérifier si d’autres programmes fonctionnent correctement peut être plus difficile. C’est là que les redémarrages progressifs préemptifs réguliers peuvent être une solution de contournement sournoise. Pour les trucs homebrew, c’est souvent assez bon.

Étude de cas 2 : Contrôleur de pompe à distance

Lorsque les machines sont autorisées à prendre des mesures par elles-mêmes, plutôt que de simplement rapporter des données, les choses peuvent devenir plus compliquées. Par exemple, imaginez un système chargé de contrôler des pompes à eau pour remplir des réservoirs à partir d’un barrage ou d’une autre source. Le système peut être surveillé et contrôlé manuellement via une liaison de données cellulaire, mais fonctionne autrement de manière indépendante, 24 heures sur 24.

Dans ce cas, beaucoup plus de rigueur peut être nécessaire pour éviter la catastrophe. Si le système tombait en panne alors que les pompes étaient activées, le barrage pourrait être vidé, ce qui entraînerait un tarissement des pompes et des dommages coûteux. Alternativement, les réservoirs pourraient déborder ou des inondations pourraient se produire. Selon l’échelle, cela pourrait causer des dégâts dans un hangar ou détruire les récoltes, les maisons et le bétail.

Ainsi, un chien de garde plus rigoureux doit être mis en place dans ces cas. Par exemple, il peut ne pas être suffisant de simplement redémarrer le contrôleur de pompe au cas où il cesserait d’envoyer des signaux de kick au chien de garde. Dans ce cas, le chien de garde peut à la place être configuré pour mettre d’abord les pompes en état de sécurité intégrée afin de minimiser les risques de dommages. Le système peut ensuite être redémarré et, une fois de retour en ligne, les opérateurs distants notifient qu’un redémarrage doit être déclenché manuellement en raison de l’échec. Cela évite au système de simplement redémarrer et de retomber instantanément en cas de problème persistant.

Dans ces cas, en particulier lorsque des équipements coûteux ou même des vies humaines peuvent être en danger, un simple Arduino ne servira probablement pas de chien de garde suffisamment fiable. Plusieurs chiens de garde redondants peuvent être nécessaires dans certains cas pour augmenter les chances d’arrêter le système en cas de panne. Aux plus hauts niveaux, des revues de code et des évaluations des risques seront nécessaires, ainsi que du matériel spécialement certifié à tous les niveaux. Mais si vous travaillez sur un système de surveillance pour un barrage municipal ou une autre installation critique pour la sécurité, vous ne cherchez probablement pas comment le faire. Si tel est le cas, veuillez contacter un superviseur ou un autre responsable et dites-lui que vous avez besoin d’aide.

Sommaire

Le but de cet article est d’expliquer le concept de base des chiens de garde et pourquoi ils sont utiles pour les systèmes distants. Espérons que les idées présentées ici sont suffisantes pour vous aider à mettre en œuvre des minuteurs de surveillance afin d’améliorer la disponibilité et la facilité d’entretien de vos propres projets. Après tout, il n’y a rien de plus cool que de pouvoir montrer votre projet à distance robuste et fiable à tout le monde au Hackerspace. Il n’y a rien de pire que de voir votre démo en direct échouer car vous ne pouvez pas redémarrer une machine distante défaillante. Ainsi, mettez vos chiens de garde en marche et montrez à quel point vous êtes un grand pirate informatique !