¿Cuál es la diferencia entre service y systemctl?

33

Tal vez esta es una pregunta trivial, pero no está totalmente claro para mí. En uno de nuestros servidores tenemos algunos procesos en segundo plano en ejecución que se iniciaron servicey otros que se iniciaron systemctl, como este:

$ service nginx start
$ systemctl start gunicorn

¿Cuál es la diferencia entre los dos comandos? ¿Cuál es la forma preferida de tratar con servicios en segundo plano? ¿Cómo configurar el comando preferido?

Aidas Bendoraitis
fuente
3
hay una muy buena explicación allí
Félix Brunet
La parte dolorosa de esto es que algunos dicen que el servicio está 'difunto' y si no es así, ¿por qué demonios cambian el orden de los argumentos como con 'find / grep / localizar', etc.? Sin coherencia en las versiones de Linux :(
killjoy

Respuestas:

37

servicees un comando de "alto nivel" utilizado para iniciar y detener servicios en diferentes unixes y linuxes. Dependiendo del administrador de servicios de "nivel inferior", serviceredirige a diferentes binarios.

Por ejemplo, en CentOS 7 redirige a systemctl, mientras que en CentOS 6 llama directamente al /etc/init.dscript relativo . Por otro lado, en versiones anteriores de Ubuntu redirige aupstart

servicees adecuado para la gestión de servicios básicos, mientras que las llamadas directas systemctlofrecen mayores opciones de control.

shodanshok
fuente
9

systemctles básicamente una versión más potente del service.

Con servicesólo se puede hacer comandos relacionados con el servicio (es decir status, reload, restart) mientras que con systemctlusted puede utilizar los comandos más avanzados tales como:

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

O servicios de enmascaramiento:

systemctl mask name.service

Hay mucha buena información en esta página de Ask Ubuntu.

SamCyanide
fuente
1

systemctles la utilidad principal para controlar demonios / servicios systemd,
mientras que el servicecomando es la utilidad tradicional en el SysVinitmundo.

Una de las características de systemd es ser compatible con los comandos SysVinit / legacy,
por lo que, si tiene el systemctlcomando,
service foo startserá una envoltura systemctl start foo.

La misma historia para chkconfig.

maioman
fuente