Iniciar, Parar e Reiniciar um Serviço com systemctl
Nesta etapa, você aprenderá como gerenciar o ciclo de vida de serviços do sistema usando comandos systemctl. Você praticará iniciar, parar e reiniciar um serviço. Para este exercício, usaremos um serviço fictício que criaremos. Essa abordagem garante que possamos manipular um serviço com segurança sem afetar funções críticas do sistema.
Primeiro, vamos criar um arquivo de unidade de serviço simples. Este arquivo definirá um serviço que simplesmente grava um timestamp em um arquivo de log a cada poucos segundos.
Crie um novo arquivo de unidade de serviço chamado mytest.service diretamente no diretório do sistema systemd usando nano:
sudo nano /etc/systemd/system/mytest.service
Cole o seguinte conteúdo no editor nano:
[Unit]
Description=My Test Service
After=network.target
[Service]
Type=simple
ExecStart=/bin/bash -c 'while true; do echo "$(date): My Test Service is running." >> /tmp/mytest.log; sleep 5; done'
ExecStop=/bin/bash -c 'echo "$(date): My Test Service stopped." >> /tmp/mytest.log'
Restart=on-failure
[Install]
WantedBy=multi-user.target
[Unit]: Contém informações genéricas sobre a unidade. Description fornece um nome legível por humanos, e After=network.target especifica que este serviço deve iniciar após a rede estar ativa.
[Service]: Define o comportamento do serviço.
Type=simple: Indica um tipo de serviço simples onde o comando ExecStart é o processo principal.
ExecStart: O comando a ser executado quando o serviço iniciar. Aqui, é um loop bash que grava uma mensagem com timestamp em /tmp/mytest.log a cada 5 segundos.
ExecStop: O comando a ser executado quando o serviço parar. Ele grava uma mensagem de parada no log.
Restart=on-failure: Configura o serviço para reiniciar se ele sair com um status diferente de zero.
[Install]: Contém informações sobre como o serviço deve ser instalado. WantedBy=multi-user.target significa que este serviço deve ser iniciado quando o sistema atingir o runlevel multi-usuário.
Salve o arquivo pressionando Ctrl+X, depois Y para confirmar e Enter para salvar o arquivo.
Agora, recarregue o daemon systemd para reconhecer o novo arquivo de serviço:
sudo systemctl daemon-reload
Iniciando um Serviço
Para iniciar um serviço, use o comando systemctl start.
Execute o seguinte comando para iniciar mytest.service. Observe que precisamos usar sudo porque as operações systemctl geralmente exigem privilégios de root.
sudo systemctl start mytest.service
Não haverá saída imediata se o comando for bem-sucedido.
Agora, verifique se o serviço está em execução verificando seu status:
systemctl status mytest.service
Você deverá ver uma saída indicando que o serviço está active (running):
● mytest.service - My Test Service
Loaded: loaded (/etc/systemd/system/mytest.service; disabled; preset: disabled)
Active: active (running) since ...
Main PID: ... (bash)
Tasks: 2 (limit: ...)
Memory: ...
CPU: ...
CGroup: /system.slice/mytest.service
├─... /bin/bash -c "while true; do echo \"\$(date): My Test Service is running.\" >> /tmp/mytest.log; sleep 5; done"
└─... sleep 5
...output omitted...
Você também pode verificar o arquivo de log para ver se o serviço está gravando mensagens:
tail -f /tmp/mytest.log
Você deverá ver novas linhas aparecendo a cada 5 segundos, semelhante a isto:
Tue Jul 22 09:15:09 AM CST 2025: My Test Service is running.
Tue Jul 22 09:15:14 AM CST 2025: My Test Service is running.
Pressione Ctrl+C para sair do tail.
Parando um Serviço
Para parar um serviço em execução, use o comando systemctl stop.
Execute o seguinte comando para parar mytest.service:
sudo systemctl stop mytest.service
Novamente, não haverá saída imediata.
Verifique se o serviço parou:
systemctl status mytest.service
A saída agora deve mostrar Active: inactive (dead):
○ mytest.service - My Test Service
Loaded: loaded (/etc/systemd/system/mytest.service; disabled; preset: disabled)
Active: inactive (dead) since ...
...output omitted...
Verifique o arquivo de log /tmp/mytest.log novamente. Você deverá ver a mensagem "My Test Service stopped." e nenhuma nova mensagem "running" aparecendo.
tail /tmp/mytest.log
A saída será semelhante a esta:
Tue Jul 22 09:15:24 AM CST 2025: My Test Service is running.
Tue Jul 22 09:15:28 AM CST 2025: My Test Service stopped.
Reiniciando um Serviço
Para reiniciar um serviço, use o comando systemctl restart. Este comando primeiro para o serviço e depois o inicia novamente. Isso é útil quando você fez alterações na configuração de um serviço e precisa que elas entrem em vigor.
Execute o seguinte comando para reiniciar mytest.service:
sudo systemctl restart mytest.service
Verifique se o serviço está em execução novamente:
systemctl status mytest.service
Você deverá ver Active: active (running) novamente, e o Main PID provavelmente será um número novo, indicando que um novo processo foi iniciado.
● mytest.service - My Test Service
Loaded: loaded (/etc/systemd/system/mytest.service; disabled; preset: disabled)
Active: active (running) since ...
Main PID: ... (bash)
Tasks: 2 (limit: ...)
Memory: ...
CPU: ...
CGroup: /system.slice/mytest.service
├─... /bin/bash -c "while true; do echo \"\$(date): My Test Service is running.\" >> /tmp/mytest.log; sleep 5; done"
└─... sleep 5
...output omitted...
Verifique o arquivo de log /tmp/mytest.log para confirmar que o serviço retomou a gravação de mensagens "running".
tail -f /tmp/mytest.log
Você deverá ver uma mensagem de "stopped" seguida por novas mensagens de "running":
Tue Jul 22 09:15:28 AM CST 2025: My Test Service stopped.
Tue Jul 22 09:15:40 AM CST 2025: My Test Service is running.
Pressione Ctrl+C para sair do tail.