Quelle est la difference entre service et systemctl?

33

C'est peut-être une question banale, mais elle n'est pas totalement claire pour moi. Sur l'un de nos serveurs, nous avons des processus d'arrière-plan en cours d'exécution qui ont été démarrés serviceet d'autres qui ont été démarrés avec systemctl, comme ceci:

$ service nginx start
$ systemctl start gunicorn

Quelle est la différence entre les deux commandes? Laquelle est la meilleure façon de gérer les services d'arrière-plan? Comment configurer la commande préférée?

Aidas Bendoraitis
la source
3
il y a une très bonne explication il
Félix Brunet
La partie douloureuse de cela, certains disent que le service est 'défunt' et si ce n'est pas le cas, pourquoi diable change-t-il l'ordre des arguments comme avec 'find / grep / Locate' etc ... pas de cohérence dans les versions linux :(
killjoy

Réponses:

37

serviceest une commande "de haut niveau" utilisée pour démarrer et arrêter des services dans différents unix et linux. Selon le gestionnaire de service "de niveau inférieur",service redirige sur différents binaires.

Par exemple, sur CentOS 7, il redirige vers systemctl, tandis que sur CentOS 6, il appelle directement le /etc/init.dscript relatif . D'un autre côté, dans les anciennes versions d'Ubuntu, il redirige versupstart

serviceconvient à la gestion des services de base, tandis que les appels directs systemctloffrent de meilleures options de contrôle.

shodanshok
la source
9

systemctlest fondamentalement une version plus puissante de service.

Avec servicevous ne pouvez faire des commandes liées au service (c. -à status, reload, restart) alors qu'avec systemctlvous pouvez utiliser des commandes plus avancées telles que:

systemctl is-failed name.service # check if service failed to load

Ou des services de masquage:

systemctl mask name.service

Il y a beaucoup de bonnes informations sur cette page de Ask Ubuntu.

SamCyanide
la source
1

systemctlest l'utilitaire principal pour contrôler les démons / services systemd,
tandis que la servicecommande est l'utilitaire traditionnel dansSysVinit monde.

L'une des fonctionnalités de systemd est d'être compatible avec les commandes SysVinit / legacy,
donc, si vous avez la systemctlcommande,
service foo startsera un wrapper autoursystemctl start foo .

Même histoire pour chkconfig.

maioman
la source