web-dev-qa-db-fra.com

Comment choisir le moyen d'activer / désactiver, de démarrer / arrêter ou de vérifier le statut d'un service?

Si je veux démarrer un service installé sur le système, je peux faire:

# /etc/init.d/some-svc start
# initctl start some-svc
# service some-svc start
# start some-svc

Si je veux désactiver un service en cours d'exécution au démarrage, je peux faire:

# rm /etc/rc2.d/S99some-svc
# update-rc.d some-svc disable
# mv /etc/init/some-svc.conf /etc/init/some-svc.conf.disabled

Ensuite, il y a différentes choses que je peux faire pour permettre aux services de démarrer au démarrage, etc.

Je suis conscient du fait que l'arrivée récente est une chose (relativement) nouvelle, et je sais comment SysV init fonctionnait, et je suis vaguement conscient d'un tas de bêtises de D-Bus, mais ce que je ne sais pas C’est ainsi que l’on veut réellement se connecter à ce genre de choses. Par exemple, je ne sais pas comment déterminer facilement si un service est un travail Upstart ou une solution SysV héritée, sans pour autant lire de manière exhaustive la source de ses scripts Shell.

Donc: si je veux démarrer ou arrêter un service, que ce soit pour le moment ou de façon persistante, lequel de ces outils devrait I utiliser et pourquoi? Si la réponse dépend d'un attribut (tel que "ce service prend en charge les démarrages"), comment puis-je en savoir plus rapidement et facilement sur cet attribut d'un package installé?

Dans le même ordre d'idées, existe-t-il des outils d'interface utilisateur capables d'interagir correctement et en toute sécurité avec l'infrastructure de service moderne (mise à jour, et/ou quelle que soit sa compatibilité sysv)? Par exemple, pourrais-je utiliser de manière fiable sysv-rc-conf pour déterminer quels services doivent démarrer?

7
Glyph

Sur le plan fonctionnel, il n'y a aucune différence entre ces méthodes d'appel.

start et stop sont des liens symboliques vers initctl. service est un script Shell qui détermine s'il faut exécuter le script init ou utiliser initctl.

Le moyen le plus simple de voir ce qu’est un travail Upstart consiste à consulter /etc/init/. Tout y est dedans est un travail Upstart. Si vous ls -l /etc/init.d/, vous verrez chaque tâche de service et système. Les travaux SysV init seront des fichiers réels, tandis que les travaux Upstart seront des liens symboliques vers /lib/init/upstart-job qui invoquera correctement le travail Upstart.

En d'autres termes, vous pouvez également appeler des travaux Upstart en appelant, par exemple, /etc/init.d/apport restart, bien que le résultat suggère d'utiliser plutôt le service, le démarrage ou l'arrêt.

Donc, dans la pratique, cela ne fait aucune différence (pour le moment!). Mais si j’écrivais quelque chose dans le script, j’utiliserais certainement le service, le démarrage ou l’arrêt, car il n’y aurait pratiquement aucune chance que cela devienne obsolète, alors que l’appel de services via /etc/init.d/ pourrait disparaître avec le temps (bien que probablement pas tout le temps) bientôt).

Une remarque sur la désactivation des services: renommer le fichier .conf fonctionne, mais je ne le recommande pas. Vous pouvez désactiver un service de cette façon, mais si une mise à niveau de package est disponible, dpkg copie une nouvelle copie du travail Upstart et, sans intention, de réactiver votre service. La méthode correcte pour désactiver un travail Upstart consiste à utiliser un fichier . Override , qui laisse le travail d'origine intact.

Par exemple, pour désactiver la répartition, créez simplement un fichier nommé /etc/init/apport.override contenant le mot "manuel".

# echo "manual" > /etc/init/apport.override

Personnellement, j'éviterais d'utiliser sysv-rc-conf. Il peut être assez sûr de l'utiliser pour modifier les travaux SysV, mais je ne suis pas sûr; il ne semble pas prendre en charge les travaux Upstart, et il n’ya aucun moyen de dire quelle interface correspond à laquelle. Je m'en tiens à update-rc.d pour gérer les scripts SysV.

Pour plus d'informations sur Upstart, voir:

  1. Le livre de recettes Upstart: http://upstart.ubuntu.com/cookbook/
  2. La commande man 5 init: http://manpages.ubuntu.com/manpages/precise/en/man5/init.5.html
9
Mark Russell