Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Alternative pour démarrage automatique de services
#1
Pas cool, quand après une panne de courant, eidb et linknx sont absents à l'appel.
Oui, le paramètrage de init.d pour lancer des services au démarrage est une forme de magie noire.
En comparaison, l'installation de linux sur un blaireau mort semble simple.
(Google: How to install linux on a dead badger)

Une alternative est d'utiliser runit (sudo apt-get install runit).
Gros point positif, runit surveille les processus et les redémarre s'ils plantent...
Il y a beaucoup de documentation facile à trouver, mais voici un ultra-résumé pour mon raspi2:

Créer un sous-dossier dans /etc/service pour chaque service à gérer.
(sudo mkdir /etc/service/eibd ; sudo mkdir /etc/service/linknx)

Vérifier que le service existe, mais ne fonctionne pas encore...

p.ex (sudo sv check eibd)

Dans chaque sous-dossier, s'il existe des fichiers (exécutables par root) appelés run et/ou finish, ils seront executés au démarrage ou à l'arrêt du service.

Voilà ce que j'ai dans /etc/service/eibd/run

#! /bin/bash
# note the use of exec and avoid running eibd as a background daemon
# my knx interface has the fixed ip 192.168.1.101 in tunnelling mode
logger 'starting eibd'
exec sudo -u pi /usr/local/bin/eibd -D -S -T -i ipt:192.168.1.101 </dev/null 2>&1 | logger -t eibd

Le ligne qui commence par logger me permet de garder un trace de démarrage dans /var/log/user.log.
La dernière ligne est importante: exec pour ne pas créer un nouveau process mais garder/continuer celui du script run, sudo pour que eibd fonctionne sous une identité autre que root, eibd qui n'est pas en mode détaché/daemon et le logger pour capturer d'éventuels messages.

Le fichier finish est facultatif mais pratique pour garder une trace de plantages...

Voici le contenu de /etc/service/eibd/finish:

#! /bin/bash
logger 'eibd dit: Carrramba encorrre raté !'
killall eidb

Ok maintenant, on peut démarrer, arrêter ou vérifier le fonctionnement de eibd et des messages dans le journal.
(sudo sv stop eibd ; sudo sv start eibd ; sudo sv check eibd ; tail -50 /var/log/user.log)

Pour linknx, il faut juste vérifier que eibd soit déjà actif avant de démarrer.
Attention avec runit, on doit gérer soi-même les dépendances ou ordres de démarrage mais au moins c'est clair ce que l'on fait. Idée de base, le script run doit planter si les conditions de démarrage ne sont pas réunies.
Runit attendra une seconde puis réessayera de le démarrer...

voici donc le contenu de /etc/service/linknx/run:

#! /bin/bash
# note the use of exec and avoid running programs as background daemon
# check that eibd is running before activating linknx
(ps -A | grep 'eibd' ) || exit 1
logger 'starting linknx'
exec sudo -u pi linknx --config=/home/pi/domotique/vab.xml 2>&1 | logger -t linknx

La ligne avec le exit 1 fait terminer le script si eibd n'est pas (encore) actif.
De nouveau, les exec, sudo, linknx en mode normal et le logger.

Le contenu du fichier /etc/service/linknx/finish est laissé comme exercice au lecteur...

J'utilise ceci sans soucis depuis plusieurs mois pour eibd, linkx et bien d'autres utilitaires domotiques, tout en surveillant régulièrement la taille du fichier journal /var/log/user.log pour répérer les récalcitrants.

Désolé, mais en raison d'un contrat conclu dans un pentacle enfumé à minuit, je n'ai pas le droit de divulguer le script de démarrage du blaireau mort.
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)