3 votes

Pourquoi l'état du service nom_service donne-t-il des réponses différentes pour différents services ?

L'exécution de la commande "service service_name status" donne trois types de résultats différents lorsque trois noms de service différents sont utilisés. J'ai essayé avec atftpd, apache2, et isc-dhcp-server, comme indiqué ci-dessous.

user@host:~$ service atftpd status
Usage: /etc/init.d/atftpd {start|stop|restart|reload|force-reload}
user@host:~$ service apache2 status
Apache2 is running (pid 1103).
user@host:~$ service isc-dhcp-server status
isc-dhcp-server start/running, process 5696

Cela pourrait-il être dû au fait que atftpd n'a pas été converti en Upstart ?

Le statut de isc-dhcp-server indique "start/running", ce qui indique qu'il a été converti pour utiliser Upstart. J'aurais pensé qu'apache2 aurait déjà été converti à Upstart. Si c'est le cas, pourquoi n'affiche-t-il pas "start/running" ?

1voto

Zoidberg Points 1746

Je pense que je comprends un peu mieux après avoir fait quelques recherches dans Ubuntu et sur Google. Tous les services n'ont pas été portés sur Upstart.

ls -l /etc/init.d/

La commande ci-dessus liste tous les fichiers mais nous sommes intéressés par quelques uns.

-rwxr-xr-x 1 root root 7621 Feb  6  2012 apache2
-rwxr-xr-x 1 root root 1511 Oct 17  2011 atftpd
lrwxrwxrwx 1 root root   21 Sep 14 10:57 isc-dhcp-server -> /lib/init/upstart-job

Comme vous pouvez le voir, apache2 et atftpd n'ont pas encore été convertis à Upstart alors que isc-dhcp-server l'a été. Listons les fichiers dans un autre répertoire.

ls -l /etc/init

Une fois encore, de nombreux dossiers sont répertoriés, mais un seul nous intéresse :

-rw-r--r-- 1 root root 1704 Sep 14 10:56 isc-dhcp-server.conf

Cela confirme que isc-dhcp-server a été converti en Upstart mais pas apache2 ni atftpd.

Mais maintenant, la question est de savoir s'il faut utiliser l'ancienne invoke-rc.d o /etc/init.d/ pour démarrer/arrêter/etc. les services, ou utiliser la commande service ou utilisez la commande initctl (Upstart) ? La réponse que je comprends le mieux est de toujours utiliser la commande service commande. Selon la façon dont les fichiers init sont configurés dans /etc/init.d/, service utilisera soit le initctl (ou commencer o arrêter ) pour les services convertis à Upstart et qui utilisent l'ancienne version de /etc/init.d/ pour les services qui n'ont pas été convertis. En tant qu'utilisateurs, nous ne devons pas nous inquiéter et utilisons toujours service . Avertissement : J'ai testé ceci uniquement dans Ubuntu 12.04.

0voto

Jon Sagara Points 697

Correct, c'est parce que vous vérifiez l'état de deux types de service, l'un est Upstart ntive (isc-dhcp-server) et les deux autres sont Système V style init scripts. L'un de ces SysV scripts (atftpd) ne supporte pas la commande status. Le site status n'est pas une commande obligatoire d'init script, à la différence de la commande start y stop .

La raison pour laquelle Apache n'a pas été converti à Upstart est la façon dont il bifurque les processus. En bref, Upstart utilise la fonction ptrace() du noyau pour suivre les bifurcations, mais il ne suit que les bifurcations et pas les sorties, il suppose que le processus parent a disparu. Pour faire court, cela n'est pas compatible avec la façon dont certains démons gèrent les bifurcations, comme apache2 et postfix.

Ces deux anciens bugs pour entrer dans le vif du sujet sur le plan technique.

Certaines personnes ont eu un peu de succès en écrivant leurs propres jobs Upstart et en démarrant Apache avec une option "no detach", mais ceci n'est pas supporté et si vous n'êtes pas prudent, une mise à jour de paquet pourrait clobber vos changements. Les Init scripts et les Upstart jobs ne sont pas destinés à être modifiés par l'utilisateur. Dpkg considère cela comme un conflit et vous le signalera lors de la mise à niveau. Si vous n'avez pas de raison spécifique de passer d'Apache à un job Upstart natif, je m'en tiendrais à l'init scripts. Note : la façon de correctement pour modifier les tâches Upstart, il faut créer un fichier .override [cf. man 5 init ].

Dans le futur, Upstart pourrait passer de ptrace() à l'utilisation de cgroups pour gérer les groupes de processus, ce qui supprimerait ce type de problème. Mais c'est encore loin de l'horizon, je crois.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X