Qual é a diferença entre service e systemctl?

33

Talvez essa seja uma pergunta trivial, mas não está totalmente clara para mim. Em um de nossos servidores, temos alguns processos em segundo plano em execução que foram iniciados servicee outros que foram iniciados systemctl, como este:

$ service nginx start
$ systemctl start gunicorn

Qual é a diferença entre os dois comandos? Qual é a maneira preferida de lidar com serviços em segundo plano? Como configurar o comando preferido?

Aidas Bendoraitis
fonte
3
existe uma explicação muito boa
Félix Brunet
A parte dolorosa disso, alguns dizem que o serviço é 'extinto' e, se não for, por que diabos eles mudam a ordem dos argumentos como em 'find / grep / localize' etc ... sem consistência nas versões do linux :(
killjoy

Respostas:

37

serviceé um comando "de alto nível" usado para iniciar e parar serviços em diferentes unixes e linuxes. Dependendo do gerenciador de serviços "de nível inferior", serviceredireciona para binários diferentes.

Por exemplo, no CentOS 7 ele redireciona para systemctl, enquanto no CentOS 6 chama diretamente o /etc/init.dscript relativo . Por outro lado, em versões mais antigas do Ubuntu, ele redireciona paraupstart

serviceé adequado para o gerenciamento básico de serviços, enquanto a chamada direta systemctloferece mais opções de controle.

shodanshok
fonte
9

systemctlé basicamente uma versão mais poderosa do service.

Com servicevocê só pode fazer comandos relacionados com o serviço (ou seja status, reload, restart) enquanto que com systemctlvocê pode usar comandos mais avançados, tais como:

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

Ou serviços de mascaramento:

systemctl mask name.service

Há muitas informações boas nesta página no Ask Ubuntu.

SamCyanide
fonte
1

systemctlé o principal utilitário para controlar daemons / serviços systemd,
enquanto o servicecomando é o utilitário tradicional no SysVinitmundo.

Um dos recursos do systemd é ser compatível com os comandos SysVinit / legacy,
portanto, se você tiver o systemctlcomando,
service foo startserá um invólucro systemctl start foo.

Mesma história para chkconfig.

maioman
fonte