Gerenciando serviços com systemd: guia prático
O systemd é o gerenciador de serviços da maioria das distribuições Linux modernas. Com ele, você controla servidores web, bancos de dados e também suas próprias aplicações, garantindo que reiniciem em caso de falha e subam junto com o sistema.
Comandos básicos
sudo systemctl status nginx # estado do serviço
sudo systemctl start nginx # inicia
sudo systemctl stop nginx # para
sudo systemctl restart nginx # reinicia
sudo systemctl reload nginx # recarrega a configuração sem derrubar conexões
sudo systemctl enable nginx # inicia automaticamente no boot
sudo systemctl disable nginx # não inicia no boot
sudo systemctl enable --now nginx # habilita e inicia de uma vez
Listar serviços:
systemctl list-units --type=service --state=running
systemctl --failed
Criando um serviço para sua aplicação
Suponha uma aplicação Node.js em /home/app/api, que roda com node server.js.
Crie o arquivo /etc/systemd/system/api.service:
[Unit]
Description=Minha API Node.js
After=network.target
[Service]
Type=simple
User=app
WorkingDirectory=/home/app/api
ExecStart=/usr/bin/node server.js
Restart=always
RestartSec=5
Environment=NODE_ENV=production
Environment=PORT=3000
[Install]
WantedBy=multi-user.target
Ative:
sudo systemctl daemon-reload
sudo systemctl enable --now api
sudo systemctl status api
O que cada opção faz
After=network.target— inicia depois da rede;User=app— roda com um usuário sem privilégios;Restart=always— reinicia automaticamente se o processo cair;Environment=— define variáveis de ambiente (para muitas variáveis, useEnvironmentFile=/caminho/.env).
Vendo os logs do serviço
journalctl -u api -f # acompanha em tempo real
journalctl -u api --since "today" # logs de hoje
journalctl -u api -n 100 --no-pager # últimas 100 linhas
Timers: uma alternativa ao cron
O systemd também agenda tarefas. Exemplo de backup diário:
/etc/systemd/system/backup.service:
[Unit]
Description=Backup diário
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
/etc/systemd/system/backup.timer:
[Unit]
Description=Executa o backup todo dia às 3h
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
systemctl list-timers
Limitando recursos
Evite que uma aplicação consuma o servidor inteiro:
[Service]
MemoryMax=1G
CPUQuota=150%
Conclusão
Com systemd, suas aplicações ficam robustas, reiniciam sozinhas e têm logs centralizados. Coloque isso em prática em um VPS-NVME-BR da VittHost, com servidores no Brasil e NVMe.Use o cupom SP-VITT20 e ganhe 20% de desconto na primeira fatura enquanto a promoção estiver ativa.