Gerir serviços com systemctl no seu VPS
No seu VPS são executados programas que têm de estar sempre disponíveis: o servidor SSH, um servidor web, uma base de dados. Estes programas chamam-se serviços. No Debian, Ubuntu, AlmaLinux e Rocky Linux, é o systemd que os inicia e monitoriza, e o systemd é controlado com o comando systemctl. Estes são os comandos de que mais vai precisar.
O estado de um serviço
systemctl status nginx
Pode omitir a extensão .service. Leia o resultado de cima para baixo:
- A bolinha antes do nome fica verde se o serviço estiver em execução, branca se estiver parado e vermelha se tiver falhado.
- Loaded indica se o serviço é iniciado no arranque (
enabled) ou não (disabled). - Active indica se está neste momento em execução (
active (running)), parado (inactive (dead)) ou se falhou (failed), e desde quando. - Na parte inferior encontram-se as últimas linhas do registo do serviço. Muitas vezes, já aí se vê o motivo de algo estar a correr mal.
Iniciar, parar e recarregar
| Comando | O que faz |
|---|---|
sudo systemctl start nginx | Iniciar agora |
sudo systemctl stop nginx | Parar agora |
sudo systemctl restart nginx | Parar e voltar a iniciar |
sudo systemctl reload nginx | Voltar a ler a configuração sem parar |
A diferença entre restart e reload é importante. Num restart, o serviço para por instantes e, se a nova configuração tiver um erro, deixa de arrancar e o seu website fica em baixo. Num reload, o serviço continua em execução; em caso de erro, o nginx mantém a configuração antiga. Por isso, teste primeiro a configuração (sudo nginx -t, sudo sshd -t) e utilize depois o reload. Nem todos os serviços suportam reload; o comando sudo systemctl reload-or-restart escolhe automaticamente.
No arranque: enable e disable
Iniciar e "iniciar no arranque" são duas coisas diferentes. Se iniciar um serviço apenas com start, ele desaparece após o próximo reinício, por exemplo devido a uma atualização do kernel.
| Comando | O que faz |
|---|---|
sudo systemctl enable --now nginx | Iniciar agora e, a partir de agora, também no arranque. Utilize isto para um serviço novo |
sudo systemctl disable --now nginx | Parar agora e deixar de iniciar no arranque |
systemctl is-enabled nginx | Mostra se o serviço é iniciado no arranque |
O que está errado? E o que está em execução?
systemctl --failed
Este comando mostra todos os serviços que falharam. A lista deve estar vazia. Verifique-a após cada reinício e cada atualização. Depois de resolver o problema, remova o aviso com sudo systemctl reset-failed.
systemctl list-units --type=service --state=runningmostra todos os serviços em execução. Se não conhecer algum, descubra o que faz. Um serviço de que não precisa é uma porta de entrada desnecessária.systemctl list-timersmostra as tarefas agendadas do systemd, com a indicação de quando foram executadas pela última vez e de quando voltarão a ser executadas. Assim pode verificar, por exemplo, se os temporizadores das atualizações automáticas ou da renovação de certificados estão a funcionar.
Os registos de um serviço
Se pretender ver mais do que as poucas linhas apresentadas em systemctl status, utilize o journalctl:
sudo journalctl -u nginx --since "1 hour ago" sudo journalctl -u nginx -p err -b
O primeiro mostra tudo o que diz respeito ao nginx na última hora, o segundo apenas os erros desde o último reinício. Encontra mais comandos em Ler registos com journalctl e docker logs.
Alterar as definições de um serviço
Nunca altere o ficheiro unit de um pacote (em /usr/lib/systemd/system/), pois uma atualização irá substituí-lo. Utilize sudo systemctl edit nginx: este comando cria um pequeno ficheiro apenas com as suas alterações e faz com que o systemd o volte a ler. Para ver o que fica efetivamente em vigor, utilize systemctl cat nginx.
sudo systemctl reboot, ou com Reiniciar no ecrã do VPS. Desligar forçado equivale a tirar a ficha da tomada: os serviços não têm oportunidade de parar corretamente e uma base de dados pode ficar danificada. Consulte O ecrã do VPS: ligar e desligar, gráficos, sistema e registo.No AlmaLinux e no Rocky Linux, o systemctl funciona exatamente da mesma forma, mas alguns serviços têm outro nome: o serviço SSH chama-se sshd em vez de ssh, o Apache chama-se httpd e a firewall firewalld.
Quer aprender mais? Siga o curso gratuito VPS e gestão de servidores Linux, lição 6.1 Gerir serviços com systemd ou lição 6.2 Ler registos com journalctl.
