Introdução
Um processo é um programa em execução. Um serviço é uma função do sistema de longa duração, gerenciada de acordo com uma definição e uma política de ciclo de vida. No Ubuntu, o systemd lê as definições das unidades, inicia e interrompe serviços, acompanha seus estados e registra suas saídas no journal do sistema.
Neste laboratório, você usará o serviço de prática isolado labex-heartbeat. Você inspecionará sua unidade, controlará seu estado de execução, configurará sua habilitação durante a inicialização, consultará o journal e os logs de texto tradicionais, acompanhará a saída em tempo real, diagnosticará uma falha controlada e restaurará o funcionamento normal. Você não editará arquivos de unidade nem mexerá no serviço SSH.
Reconhecer o systemd e as unidades de serviço
Nesta etapa, você confirmará que o systemd está disponível e distinguirá as unidades em execução dos arquivos de unidade instalados.
Acesse o espaço de trabalho do laboratório:
cd /home/labex/project/service-lab
Exiba a versão do systemd. A primeira linha é suficiente para identificá-lo:
systemctl --version | head -n 1
Consulte o estado geral do systemd:
systemctl is-system-running || true
running significa que todas as unidades necessárias estão funcionando corretamente. Uma máquina virtual de treinamento pode informar degraded porque uma unidade opcional não relacionada falhou; ainda assim, o comando comprova que o systemd está respondendo.
Liste uma amostra dos serviços atualmente em execução:
systemctl list-units --type=service --state=running --no-pager | head -n 12
Uma unidade é um objeto gerenciado pelo systemd. As unidades de serviço terminam em .service. Os arquivos de unidade descrevem o que pode ser gerenciado, mesmo quando não está em execução:
systemctl list-unit-files --type=service --no-pager | head -n 12
Salve um resumo compacto do systemd. A substituição de comando $(...) insere a saída de um comando no texto escrito por printf:
printf 'systemd=%s\nstate=%s\n' "$(systemctl --version | head -n 1)" "$(systemctl is-system-running)" > systemd-summary.txt
cat systemd-summary.txt
Inspecionar a definição e o estado de um serviço
Nesta etapa, você inspecionará o serviço de prática preparado antes de iniciá-lo.
systemctl status reúne o caminho da unidade carregada, o estado de habilitação, o estado de execução, informações do processo e as linhas mais recentes do log:
cd /home/labex/project/service-lab
systemctl status labex-heartbeat.service --no-pager
O serviço deve estar como inactive (dead) e disabled. Inativo significa que ele não está em execução no momento; desabilitado significa que não está configurado para iniciar por meio do destino de instalação durante a inicialização. Essas são propriedades independentes.
Exiba a definição da unidade:
systemctl cat labex-heartbeat.service
A seção [Unit] descreve a identidade e a ordenação, [Service] define o processo e [Install] descreve a habilitação. Você apenas inspecionará esta unidade preparada; não será necessário criar uma.
Use systemctl show para consultar propriedades em formato adequado para máquinas:
systemctl show labex-heartbeat.service -p LoadState -p ActiveState -p SubState -p UnitFileState
Salve essas propriedades para verificação:
systemctl show labex-heartbeat.service -p LoadState -p ActiveState -p SubState -p UnitFileState > service-properties.txt
cat service-properties.txt
Iniciar, interromper e reiniciar um serviço
Nesta etapa, você alterará o estado de execução do serviço de prática e confirmará cada resultado.
Para iniciar e interromper serviços do sistema, são necessários privilégios elevados. Inicie o serviço:
sudo systemctl start labex-heartbeat.service
Verifique o estado ativo de forma resumida:
systemctl is-active labex-heartbeat.service
A saída esperada é active. Exiba o estado detalhado:
systemctl status labex-heartbeat.service --no-pager
Agora o estado deverá incluir um PID principal. Interrompa o serviço e examine o resultado:
sudo systemctl stop labex-heartbeat.service
systemctl is-active labex-heartbeat.service || true
O estado esperado é inactive. Inicie-o novamente e, em seguida, use restart para substituir o processo em execução em uma única operação:
sudo systemctl start labex-heartbeat.service
sudo systemctl restart labex-heartbeat.service
systemctl show labex-heartbeat.service -p ActiveState -p SubState -p MainPID
Ao final desta etapa, o serviço deverá apresentar ActiveState=active e SubState=running.
Configurar a habilitação durante a inicialização
Nesta etapa, você distinguirá o estado atual de execução de um serviço da sua habilitação para futuras inicializações.
O serviço está ativo desde a etapa anterior, mas a configuração inicial deixou seu arquivo de unidade desabilitado. Verifique a habilitação:
systemctl is-enabled labex-heartbeat.service || true
Habilite o serviço:
sudo systemctl enable labex-heartbeat.service
systemctl is-enabled labex-heartbeat.service
A habilitação cria links que conectam o serviço a um destino de inicialização. Ela não precisa reiniciar um serviço que já esteja em execução.
Pratique a remoção desses links de inicialização:
sudo systemctl disable labex-heartbeat.service
systemctl is-enabled labex-heartbeat.service || true
O serviço pode continuar ativo mesmo que a saída agora seja disabled. Habilite-o novamente para deixar o laboratório em seu estado final:
sudo systemctl enable labex-heartbeat.service
Confirme as duas propriedades independentes:
systemctl is-active labex-heartbeat.service
systemctl is-enabled labex-heartbeat.service
Consultar logs do serviço com journalctl
Nesta etapa, você lerá a saída recente do serviço no journal do systemd e salvará um recorte específico.
Os serviços gerenciados pelo systemd normalmente enviam a saída padrão e a saída de erro padrão para o journal. Consulte apenas a unidade de prática:
sudo journalctl -u labex-heartbeat.service -n 10 --no-pager
A opção -u seleciona uma unidade, -n 10 mantém os dez registros mais recentes e --no-pager exibe tudo diretamente. Você deverá ver a mensagem de inicialização do serviço e os registros de heartbeat.
Limite os resultados a um intervalo de tempo recente:
sudo journalctl -u labex-heartbeat.service --since "5 minutes ago" --no-pager
Filtre por prioridade de aviso ou superior. Nenhuma saída é um resultado normal e válido quando o serviço não registrou nenhum aviso:
sudo journalctl -u labex-heartbeat.service -p warning --since "5 minutes ago" --no-pager
Salve um recorte recente e específico da unidade no espaço de trabalho do projeto:
cd /home/labex/project/service-lab
sudo journalctl -u labex-heartbeat.service -n 20 --no-pager > service-journal.txt
tail -n 5 service-journal.txt
Acompanhar um log de texto tradicional
Nesta etapa, você inspecionará /var/log e acompanhará um log de texto enquanto novos registros são adicionados.
A hierarquia /var/log armazena vários logs tradicionais do sistema e de aplicativos. Liste uma pequena amostra:
ls -lh /var/log | head -n 12
Leia os registros mais recentes do serviço de prática:
tail -n 5 /var/log/labex-heartbeat.log
A opção -f acompanha um arquivo e exibe novas linhas à medida que outro processo as adiciona:
tail -f /var/log/labex-heartbeat.log
Aguarde até ver pelo menos duas novas linhas de heartbeat e pressione Ctrl+C. Isso interrompe o tail, mas não o serviço que está gravando o log.
Filtre as linhas de heartbeat e exiba as três mais recentes:
grep '^heartbeat ' /var/log/labex-heartbeat.log | tail -n 3
Salve uma amostra de cinco linhas no espaço de trabalho do projeto:
cd /home/labex/project/service-lab
tail -n 5 /var/log/labex-heartbeat.log > traditional-log-sample.txt
cat traditional-log-sample.txt
Diagnosticar e recuperar um serviço com falha
Nesta etapa, você criará uma falha de configuração controlada, usará o estado do serviço e os logs para identificá-la e restaurará o funcionamento normal.
Interrompa o serviço de prática e faça uma cópia de segurança da configuração simples:
sudo systemctl stop labex-heartbeat.service
sudo cp /etc/labex-heartbeat.conf /etc/labex-heartbeat.conf.bak
Substitua o intervalo numérico por um valor inválido. Isso interromperá intencionalmente apenas o serviço de prática:
sudo sed -i 's/^INTERVAL=2$/INTERVAL=invalid/' /etc/labex-heartbeat.conf
Tente iniciar o serviço. É esperado que seja exibida uma mensagem de falha:
sudo systemctl start labex-heartbeat.service || true
Inspecione o estado de falha:
systemctl status labex-heartbeat.service --no-pager || true
systemctl is-failed labex-heartbeat.service
O estado informa que o processo foi encerrado, mas o journal apresenta o motivo específico da aplicação:
sudo journalctl -u labex-heartbeat.service -n 10 --no-pager
Procure configuration error: INTERVAL must be a positive integer. Restaure a configuração válida, limpe o estado de falha registrado e inicie o serviço novamente:
sudo mv /etc/labex-heartbeat.conf.bak /etc/labex-heartbeat.conf
sudo systemctl reset-failed labex-heartbeat.service
sudo systemctl start labex-heartbeat.service
Confirme a recuperação:
systemctl is-active labex-heartbeat.service
cat /etc/labex-heartbeat.conf
O serviço deverá estar active, e a configuração deverá conter novamente INTERVAL=2.
Resumo
Você distinguiu processos, serviços, estado ativo e habilitação durante a inicialização. Inspecionou uma unidade do systemd, controlou um serviço de prática seguro com systemctl e consultou seus registros com journalctl.
Você também inspecionou /var/log, acompanhou a saída de texto em tempo real com tail -f, usou o estado e os logs em conjunto para explicar uma falha controlada e restaurou o serviço. Esse fluxo de trabalho — primeiro o estado, depois os logs — é uma base prática para a solução de problemas de serviços.



