Je suis nouveau sur Linux et je me teste en utilisant une instance Amazon Lightsail (Ubuntu 16.04 LTS).
En parcourant les nombreux guides que j'ai rencontrés, je vois des personnes utiliser différentes commandes pour démarrer/arrêter/redémarrer/recharger/vérifier l'état d'un service. Plus précisément ceux-ci;
Sudo systemctl status Apache2.service
Sudo /bin/systemctl status Apache2.service
Sudo /etc/init.d/Apache2 status
Sudo service Apache2 status
Toutes les commandes ci-dessus fonctionnent.
L'utilisation de init.d dans Monit a posé des problèmes lorsque je voulais utiliser l'option de statut (le statut sera que le service est hors ligne alors qu'il était en ligne - redémarré par Monit). Modifiez le code dans Monit de inid.d à/bin/systemctl, corrigez-le.
Il semble que l'utilisation de init.d fournisse plus d'informations sur ce qui s'est passé que les autres. Si je devais utiliser l'une des autres commandes, est-il possible de les afficher davantage d'informations sur ce qui a été fait?
ubuntu@ip-172-26-12-245:~$ Sudo systemctl restart pure-ftpd.service
ubuntu@ip-172-26-12-245:~$ Sudo /bin/systemctl restart pure-ftpd.service
ubuntu@ip-172-26-12-245:~$ Sudo /etc/init.d/pure-ftpd restart
[ ok ] Restarting pure-ftpd (via systemctl): pure-ftpd.service.
ubuntu@ip-172-26-12-245:~$ Sudo service pure-ftpd restart
ubuntu@ip-172-26-12-245:~$
Je voudrais remercier d'avance tous ceux qui ont pris le temps de lire et de répondre à cette question.
Pour commencer, il y a toute une histoire et une difficulté à surmonter pour passer de SysVInit
à SystemD
name__. Plutôt que d'essayer de tout décomposer en une seule réponse, je vous renvoie à une page de Google pour plus de détails sur l'historique, ainsi qu'à un article sur le sujet:
http://www.tecmint.com/systemd-replaces-init-in-linux/
En résumé, la transition a été lente et pénible. Certaines fonctionnalités héritées sont restées intactes (telles que init.d
dans une certaine mesure). Si vous avez la possibilité d'utiliser systemctl
pour votre contrôle de service, je vous recommande de l'utiliser. C’est l’avenir prévisible pour Linux et, éventuellement, les anciennes méthodes SysVInit
seront considérées comme totalement obsolètes et supprimées.
Pour couvrir chacun de ceux que vous avez énumérés spécifiquement:
Sudo systemctl status Apache2.service
Il s'agit de la nouvelle approche SystemD
pour la gestion des services. À l'avenir, les applications sur Linux sont conçues pour utiliser la méthode systemd, pas une autre.
Sudo /bin/systemctl status Apache2.service
C'est la même chose que la commande précédente. La seule différence dans ce cas est que la recherche de la commande ne dépend pas de la variable d'environnement $PATH
du Shell, elle répertorie explicitement la commande en incluant le chemin d'accès à la commande.
Sudo /etc/init.d/Apache2 status
Il s'agit de la méthode SysVInit
d'origine permettant d'appeler un service. Les scripts d'initialisation seraient écrits pour un service et placés dans ce répertoire. Alors que cette méthode est encore utilisée par beaucoup, service
est la commande qui a remplacé cette méthode d’appel sur les services dans SysVInit
name__. Il existe certaines fonctionnalités héritées pour cela sur les systèmes plus récents avec SystemD
name__, mais la plupart des programmes plus récents n'incluent pas cela, et tous les anciens scripts d'initiation d'application ne fonctionnent pas avec.
Sudo service Apache2 status
Il s’agissait du principal outil utilisé sur les systèmes SysVInit
pour les services. Dans certains cas, il est simplement lié aux scripts /etc/init.d/
, mais dans d'autres cas, il est utilisé dans un script init stocké ailleurs. Il visait à faciliter la transition vers la gestion de la dépendance de service.
Enfin, vous mentionnez vouloir savoir comment obtenir plus d’informations à partir des commandes, car certaines fournissent plus d’informations que d’autres. Ceci est presque toujours déterminé par l’application et par la manière dont elle a conçu son fichier de service ou init. En règle générale cependant, s’il s’achève silencieusement, il réussit. Cependant, pour vérifier une start
name__, stop
ou restart
name__, vous pouvez utiliser la sous-commande status
pour voir comment cela se passe. Vous avez mentionné qu'une commande status
était incorrecte sur un ancien script d'initialisation. C'est un bug que les développeurs d'applications devraient examiner. Cependant, les scripts init devenant la méthode de gestion des services déconseillée, ils peuvent simplement ignorer le bogue jusqu'à ce qu'ils suppriment entièrement l'option de script init. Le systemctl status
devrait toujours fonctionner correctement, sinon un bogue devrait être enregistré avec les développeurs de l'application.