C'est peut-être une question banale, mais ce n'est pas totalement clair pour moi. Sur l'un de nos serveurs, nous avons certains processus d'arrière-plan en cours d'exécution qui ont été démarrés avec service
et 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?
service
est 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 services "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 script relatif /etc/init.d
. D'un autre côté, dans les anciennes versions d'Ubuntu, il redirige vers upstart
service
est adéquat pour la gestion des services de base, tandis que l'appel direct systemctl
donne de meilleures options de contrôle.
systemctl
est fondamentalement une version plus puissante de service
.
Avec service
vous ne pouvez faire que des commandes liées au service (ie status
, reload
, restart
) alors qu'avec systemctl
vous 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.
systemctl
est le principal utilitaire pour contrôler les démons/services dans systemd
,
tandis que la commande service
est l'utilitaire traditionnel dans le monde SysVinit
.
L'une des fonctionnalités de systemd est d'être compatible avec les commandes SysVinit/legacy,
donc, si vous avez la commande systemctl
,service foo start
sera un wrapper autour de systemctl start foo
.
Même histoire pour chkconfig
.