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 a saída deles no journal do sistema.
Neste laboratório, você usará o serviço de prática isolado labex-heartbeat. Você inspecionará a unidade, controlará seu estado em execução, configurará a habilitação na inicialização, consultará o journal e os logs de texto tradicionais, acompanhará a saída em tempo real, diagnosticará uma falha controlada e restaurará a operação normal. Você não editará arquivos de unidade nem tocará no serviço SSH.
Reconheça o systemd e as unidades de serviço
Nesta etapa, você confirmará que o systemd está disponível e diferenciará as unidades em execução dos arquivos de unidade instalados.
Entre no diretório de trabalho do laboratório:
cd /home/labex/project/service-lab
Exiba a versão do systemd. A primeira linha é suficiente para identificá-la:
systemctl --version | head -n 1
Consulte o estado geral do systemd:
systemctl is-system-running || true
running significa que todas as unidades obrigatórias estão funcionando corretamente. Uma máquina virtual de treinamento pode informar degraded porque uma unidade opcional não relacionada falhou; mesmo assim, o comando confirma que o systemd está respondendo.
Liste uma amostra dos serviços em execução no momento:
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 o item 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
Inspecione 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 combina o caminho da unidade carregada, a habilitação, o estado em execução, as informações do processo e as linhas de log mais recentes:
cd /home/labex/project/service-lab
systemctl status labex-heartbeat.service --no-pager
O serviço deve estar como inactive (dead) e disabled. Inactive significa que ele não está em execução no momento; disabled significa que ele 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 ordem de inicialização, [Service] define o processo e [Install] descreve a habilitação. Você apenas inspecionará essa unidade preparada; não é necessário criar uma unidade.
Use systemctl show para exibir 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
Inicie, pare e reinicie 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. Consulte o estado completo:
systemctl status labex-heartbeat.service --no-pager
Agora, o status deve incluir um PID principal. Interrompa o serviço e inspecione o resultado:
sudo systemctl stop labex-heartbeat.service
systemctl is-active labex-heartbeat.service || true
O estado esperado é inactive. Inicie o serviço novamente e 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 deve apresentar ActiveState=active e SubState=running.
Configure a habilitação na inicialização
Nesta etapa, você diferenciará o estado atual de execução de um serviço da configuração que determina se ele será habilitado nas próximas inicializações.
O serviço está ativo desde a etapa anterior, mas a configuração inicial deixou o arquivo da 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 restaurar o estado final do laboratório:
sudo systemctl enable labex-heartbeat.service
Confirme as duas propriedades independentes:
systemctl is-active labex-heartbeat.service
systemctl is-enabled labex-heartbeat.service
Consulte os 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 o 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 os registros diretamente. Você deverá ver registros recentes de heartbeat. A mensagem de inicialização pode ter ficado fora desta visualização limitada enquanto o serviço continuava em execução.
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 saudável 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 específico da unidade no diretório 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
Acompanhe um log de texto tradicional
Nesta etapa, você inspecionará /var/log e acompanhará um log de texto enquanto novos registros forem adicionados.
A hierarquia /var/log armazena muitos 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 enquanto 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 interrompe 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 diretório 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
Diagnostique e recupere 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á a operação 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. É esperada 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 status informa que o processo terminou, mas o journal fornece o motivo específico do aplicativo:
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 deve estar como active, e a configuração deve conter novamente INTERVAL=2.
Resumo
Você diferenciou processos, serviços, estado ativo e habilitação na 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 status e os logs em conjunto para explicar uma falha controlada e restaurou o serviço. Esse fluxo, que prioriza o estado e depois consulta os logs, é uma base prática para a solução de problemas de serviços por iniciantes.



