Existe-t-il un moyen standard de démarrer et d'arrêter des services sous Linux?

15

Jusqu'à récemment, il existait un moyen simple et efficace de démarrer / arrêter / redémarrer les services:

service nginx start|stop|restart

Cela a fonctionné parfaitement pendant tant d'années, ... jusqu'à ce que certains pantalons intelligents décident de les améliorer et maintenant je suis confronté à des systèmes Debian / Ubuntu où le servicescript ne fait rien (car je suis censé utiliser les choses comme systemctl start nginx.service(beaucoup plus longtemps, pas de travail automatique, ...)

Ma question se réfère spécialement à Debian et Ubuntu, mais il serait également utile de couvrir également les distributions CentOS / RedHat.

Alors, y a-t-il quelque chose qui peut me sauver de ces changements condamnés?

Au cas où ce ne serait pas clair, je cherche un moyen cohérent de les gérer, celui qui fonctionnerait sur Debian 7.x, 8.x, les derniers Ubuntu LTS et non-LTS.

PS. En dehors de la portée de cette question spécifique, mais des félicitations supplémentaires accordées si la solution couvrait également la partie d'activation et de désactivation des services.

Sorin
la source
5
L'achèvement des onglets fonctionne pour systemctl pour moi ... Et, que cela plaise ou non, systemd est la norme de facto maintenant: peut aussi bien s'y habituer.
jasonwryan
1
Extra: si la commande de service devient inutile, puis-je la supprimer? Quel paquet le fournit?
sorin
3
Cela n'a pas de sens de remplacer l'ancienne servicecommande par un wrapper qui appelle à la place servicectl?
Sorin du
4
@jasonwryan Oui, mais vous pouvez également faire exactement cela , et un wrapper pourrait le gérer, rendant la transition vers systemd plus fluide pour les utilisateurs.
Dmitry Grigoryev
2
Ne fait servicevraiment rien pour vous? Cela fonctionne comme prévu sur mon LMDE (qui est essentiellement un test Debian), je ne pensais pas que c'était une chose spécifique à LMDE. Cela fonctionne également comme prévu dans ma machine virtuelle Ubuntu.
terdon

Réponses:

6

Il y a eu un certain nombre de systèmes de contrôle de démarrage et de service variés sur les plates-formes Unix au cours de son histoire enchevêtrée.

Le service\chkconfigsystème basé que vous avez trouvé simple et efficace est généralement appelé style SysVinit et a été une étape majeure sur la voie d'une sorte de normalisation. Vous trouverez ce style de démarrage sur RHEL / CentOS (EL) à travers la version 6, Fedora à 14 et sur les distributions basées sur Debian / Ubuntu jusqu'en 2015. Ce n'était pas le seul système de démarrage, cependant, le style BSD (plus simple) le système init a encore de nombreux fans.

SysVinit n'était pas une solution parfaite (qu'est-ce que c'est?) Et Systemd a été conçu pour surmonter de nombreux problèmes; c'est le systemctlsystème basé sur les commandes que vous utilisez actuellement. Bien qu'il ne soit pas universellement apprécié (les gens détestent le changement, les ballonnements, etc.), il ne fait aucun doute qu'il devient rapidement la norme de facto dans la majorité des distributions.

Par conséquent, en regardant immédiatement vers l'avant, la réponse à votre question initiale est simplement:
La façon standard de contrôler les services dans la plupart des distributions Linux est maintenant systemctl!
Combien de temps cela restera vrai est la supposition de personne; probablement jusqu'à ce que quelque chose arrive, c'est mieux et est largement adopté.

Je suis sûr qu'il y aura des wrappers disponibles pour permettre, votre favori actuel, aux service/chkconfigcommandes de continuer à faire des choses principalement saines, mais avec cette courbe d'apprentissage particulière, il est probablement préférable de ne pas la combattre. Peut-être qu'à l'avenir, pendant un certain temps, il y aura aussi des systemctlwrappers pour les anciens systèmes, pour rendre leur gestion aux côtés des plus actuels moins pénible;)

DanSut
la source
Et avant cela était xinetd, et avant cela était inetd
jas-
@ jas- Je pense que les inetd sont vraiment des services eux-mêmes, je pense qu'ils peuvent exister dans tous les systèmes de démarrage. Ils sont un type particulier de service qu'ils offrent une solution de rechange pour d'autres services à l' exécution des services complets, en leur fournissant à la place à la demande . Je comprends cependant d'où vous venez dans le contexte de ce Q, juste une autre façon de démarrer les services.
DanSut
Dans toutes les distributions; gentoo, centos, redhat, debian, ubuntu etc., xinetd et précédemment inetd consistaient en un petit script shell pour démarrer, arrêter et recharger les configurations de divers services, mais oui vous avez raison, il s'agissait en fait d'un service tout comme systemd.
jas-
Ubuntu a utilisé upstart depuis 6.10 et Fedora depuis 9 (jusqu'à ce qu'ils soient remplacés par systemd) upstart.ubuntu.com , et il a été possible de faire passer Debian de sysvinit pendant plusieurs années ...
James Tocknell
5

N'est-il pas logique de remplacer l'ancienne servicecommande par un wrapper qui appelle servicectl[sic] à la place?

Oui, mais […] un wrapper pourrait le gérer, rendant la transition vers systemd plus fluide pour les utilisateurs.

… Qui est, comme d'autres l'ont dit dans les commentaires, ce qui a été fait depuis longtemps .

La /usr/sbin/servicecommande sur Debian 8 fait partie du paquet sysvinit-utils. Il existe depuis 2009. Il s'agit d'un ajout d'origine Debian spécifique à Debian au paquet source sysvinit d'origine, et comme on peut le voir à la lecture du script, il reconnaît à la fois l'exécution de systemd et la présence de travaux parvenus, utilisant des commandes vers systemctlet initctl( via ses alias) respectivement. C'est ce qu'il fait depuis 2013.

service name actionest assez largement disponible même sur les systèmes d'exploitation non Linux. Il fonctionnera même sur la plupart des BSD, car eux aussi ont leurs propres servicecommandes. Il y a aussi une servicecommande shim dans le paquet nosh qui se traduit par . Mais …system-control action name

  • … Allez au-delà de ce sous-ensemble commun et il y a beaucoup moins de compatibilité tout autour.
  • … OpenBSD n'a pas de servicecommande.
  • … Les servicecommandes BSD ont des problèmes bien connus de longue date que les administrateurs système racontent depuis des décennies.

L'activation et la désactivation des services est une situation similaire. Bien que le chkconfigprogramme SuSE (disponible pour Debian et Ubuntu) soit très différent de celui de Fedora (ils sont écrits dans des langages de programmation entièrement différents, même - un compilé, un interprété), il existe une syntaxe minimale commune , l' action étant ou . Mais …chkconfig name actiononoff

  • … Encore une fois, au-delà de ce sous-ensemble commun, la compatibilité est moindre.
  • … Il n'y en a pas chkconfigsur les BSD, car les outils conventionnels pour cela sont soit sysrcles plus récents OpenBSD rcctl enableet rcctl disable. Il y a chkconfiget des rcctlcales dans le package nosh qui se traduisent par et .system-control enable namesystem-control disable name
  • … Seule la Fedora chkconfigconnaît systemd et agit comme une cale pour systemctl enableet systemctl disable. Le SuSE chkconfign'a aucune connaissance de systemd.

Lectures complémentaires

JdeBP
la source
2

Il n'existe aucun moyen standard de démarrer et d'arrêter des services sous Linux.

y a-t-il quelque chose qui peut me sauver de ces changements condamnés?

Essayez l'outil de gestion / orchestration de la configuration: Ansible , Chef , Saltstack , Puppet ou autre.

Vous pouvez démarrer et activer un service avec Ansible:

ansible all -i inv -m service -a 'name=service-name state=started enabled=true'

Jetez un œil à la classe LinuxService dans le servicemodule d'Ansible :

Il s'agit de la classe de manipulation des services Linux - elle prend actuellement en charge un mélange de binaires et de scripts d'initialisation pour contrôler les services démarrés au démarrage, ainsi que pour contrôler l'état actuel.

Evgeny Vereshchagin
la source
D'une manière ou d'une autre, il semble que les gars d'Ubuntu ont réussi à maintenir le script de service après le passage à systemd. En regardant à l'intérieur, il semble être assez intelligent pour utiliser le bon backend. Je ne peux pas en dire autant de Debian.
Sorin
1

Votre problème est que Debian / Ubuntu sont passés au nouveau systemden remplacement de l'ancien sysvinit. Demandez quel est le meilleur et vous allez commencer une guerre de flamme, mais vous pourrez toujours revenir à l'ancien sysvinit, vérifiez ce si vous voulez revenir en arrière.

YoMismo
la source