Je recherche une méthode standard ou une meilleure pratique pour maintenir en vie un démon démarré par un init.d
script shell.
Ou encore mieux, existe-t-il un moyen de le garder en vie directement /etc/init.d
?
Plus précisément, j'ai un démon appelé dtnd avec et boucle infinie qui recherche un processus terminé inattendu, s'il y en a un, le démon les réveille à nouveau. En outre, j'utilise l'outil start-stop-daemon afin de laisser la précession s'exécuter à partir d'un utilisateur système donné.
Je veux exécuter ce démon dtnd à partir du démarrage. Afin d'obtenir ce comportement, j'ai créé un script init.d qui "enveloppe" le fichier dtnd à l'aide des commandes start, stop et status.
J'ai 2 questions que j'aimerais résoudre:
Existe-t-il un moyen de maintenir en vie certains processus du script shell init.d. Est-ce une pratique standard / meilleure?
Il est recommandé de garder un processus vivant avec une boucle infinie? Je suppose qu'il vaut mieux utiliser une commande comme
respawn
pour y parvenir. C'est correct?
Je connais l'existence du respawn
commandement. Je pense que c'est ce dont j'ai besoin mais je ne comprends pas le flux de travail entre /etc/init.d/
et /etc/init
. Quelqu'un peut-il m'aider?
Notez que je n'ai inittab ni arriviste (je suis autorisé à utiliser /etc/init
, /etc/init.d
, cron
et des outils système comme start-stop-daemon
. Je veux dire, seuls les outils par défaut)
Merci beaucoup pour votre temps!
Réponses:
Debian finira par avoir systemd, c'est donc la façon de le faire sur un système Linux qui utilise systemd (et beaucoup le font déjà; vous pourriez envisager de changer de distribution).
Systemd peut gérer la maintenance du service automatiquement pour vous; aucun autre outil n'est requis. Assurez-vous simplement que cela
Restart=always
est défini dans la[Service]
section du fichier de service .Plusieurs autres options sont également disponibles, pour des scénarios plus complexes.
la source
systemd
semble se défaire duinit.d
script et de la base*.service
systemctl edit myservice
, puissystemctl daemon-reload
redémarrez myservice.Vous pouvez l'ajouter à
/etc/inittab
avecrespawn
:C'est un hack sale, mais je l'ai utilisé avec succès dans le passé sur les anciens systèmes sysv-init.
la source
Eh bien, c'est l'une des principales raisons pour lesquelles Debian passe à systemd.
sysvinit (/etc/init.d) n'est pas en mesure de détecter si un service est en panne / ne répond pas. Cela signifie que vous devez surveiller ces services et escalader si un service ne fait plus son travail.
la chose la plus simple à faire serait probablement de migrer vers un autre gestionnaire de démons comme systemd (par défaut dans RHEL7, sera par défaut dans les prochains debian et ubuntu lts), upstart (par défaut dans RHEL6, Ubuntu 12.04 et 14.04), daemontools (comme mentionné, développé par djb) ou autre chose.
faire le travail de maintenir un service en vie sera PITA in sysvinit.
la source
La meilleure pratique consiste à s'assurer que vos démons NE S'ARRÊTENT PAS en premier lieu.
À défaut, vous voudrez peut-être jeter un œil aux daemontools de DJB
la source
L'approche standard pour moi est d'utiliser l' utilitaire Monit pour cela.
Je ne peux pas vraiment dire à partir de votre description si vous avez écrit quelque chose comme Monit et essayez de vous assurer qu'il fonctionne, ou si vous avez besoin de quelque chose pour regarder le démon que vous avez créé.
la source