28.02.2025

O que é o comando service e como ele se compara ao systemctl?

Anteriormente, o comando service era tradicionalmente usado para gerenciar serviços do sistema. Por exemplo, para reiniciar o servidor web Apache, você poderia executar:

service apache restart

No entanto, com a introdução do systemd, que se tornou o padrão em muitas distribuições modernas do Linux, agora é recomendado usar systemctl para gerenciar serviços.

Qual a diferença entre service e systemctl?

Ambos os comandos são usados para administrar serviços, mas em sistemas modernos, o service é essencialmente um invólucro (wrapper) para o systemctl.

O comando service era amplamente utilizado em sistemas que rodavam o SysVinit e o Upstart, como versões mais antigas do Debian, CentOS 6 e Ubuntu 14.04. Ele interagia diretamente com os scripts localizados em /etc/init.d/.

Por outro lado, o systemctl trabalha diretamente com o systemd, um gerenciador de sistema e serviços moderno que oferece mais controle sobre processos e suas dependências.

Prova de que service chama systemctl

Se você executar o seguinte comando:

strace -f service nginx restart 2>&1 | grep execve

O resultado será algo assim:

execve("/usr/bin/systemctl", ["systemctl", "restart", "nginx.service"])

Isso confirma que, na verdade, o comando service está apenas chamando o systemctl para executar a operação.

Você também pode inspecionar o conteúdo do comando service com:

cat /usr/sbin/service

Na maioria das distribuições modernas do Linux, ele é simplesmente um script Bash que chama internamente os comandos correspondentes do systemctl.

Como gerenciar serviços corretamente?

De acordo com as melhores práticas atuais, recomenda-se o uso do systemctl, pois ele interage diretamente com o systemd e oferece mais funcionalidades.

No entanto, o comando service ainda está disponível e, na maioria dos casos, o resultado final será o mesmo.

Métodos alternativos para gerenciar serviços

Dependendo do sistema de inicialização, diferentes comandos podem ser usados:

/etc/init.d/nginx restart # Para SysVinit
rc-service nginx restart # Para OpenRC
sv restart nginx # Para runit
s6-rc -d change nginx # Para s6
supervisorctl restart nginx # Para Supervisor

Como verificar qual sistema de inicialização está em uso?

Para determinar qual sistema de inicialização seu sistema utiliza, execute:

ps -p 1 -o comm=

Isso exibirá o nome do processo em execução com o PID 1, ajudando a identificar se o sistema usa systemd, SysVinit ou outro gerenciador de serviços.

Conclusão

Se o seu sistema usa systemd, é melhor utilizar systemctl, pois ele oferece mais recursos e é a ferramenta nativa. No entanto, o comando service continua sendo uma alternativa conveniente, especialmente em sistemas onde o systemd não está disponível.

FAQ

Posso continuar usando service em vez de systemctl?
Sim, em muitas distribuições modernas do Linux, o comando service funciona como um invólucro (wrapper) do systemctl. No entanto, é recomendado utilizar systemctl diretamente para melhor compatibilidade com o systemd.

Como posso verificar qual sistema de inicialização meu Linux está usando?
Você pode executar o seguinte comando para descobrir o sistema de inicialização:

ps -p 1 -o comm=

Se a saída for systemd, seu sistema está usando systemd. Caso contrário, pode estar rodando um sistema de inicialização mais antigo, como SysVinit ou Upstart.

O que acontece se eu usar service em um sistema com systemd?
Em sistemas baseados no systemd, o comando service geralmente atua como uma camada de compatibilidade e traduz os comandos para chamadas systemctl, garantindo que os serviços sejam gerenciados corretamente.

Existem alternativas ao systemctl para gerenciar serviços?
Sim, dependendo do sistema de inicialização em uso, você pode encontrar alternativas como /etc/init.d/, rc-service, sv, s6-rc e supervisorctl.