Você fez deploy do seu app Flask em uma instância EC2 e tudo funciona. Aí a instância reinicia após um evento de manutenção e o app não volta. A correção é um serviço systemd: ele diz ao Linux para iniciar o seu app automaticamente em cada boot, reiniciá-lo se travar, e gerenciar os logs pelo journald.
TL;DR: Crie um serviço systemd no Linux para iniciar automaticamente um app Flask no boot e mantê-lo rodando após travamentos.
Stack: Linux, systemd, Flask, EC2
Nível: Intermediário
Tempo de leitura: ~5 min
Criar o arquivo de serviço systemd
sudo nano /etc/systemd/system/meu-app.service
[Unit]
Description=Meu App Flask
After=network.target
[Service]
User=ubuntu
WorkingDirectory=/home/ubuntu/meuapp
ExecStart=/home/ubuntu/meuapp/venv/bin/flask run --host=0.0.0.0 --port=5001
Environment="PATH=/home/ubuntu/meuapp/venv/bin"
Restart=always
[Install]
WantedBy=multi-user.target
Os campos principais: ExecStart é o comando a executar, Restart=always faz o systemd reiniciar o processo se ele sair por qualquer motivo, e WantedBy=multi-user.target faz com que ele inicie em cada boot normal.
Habilitar e iniciar o serviço
sudo systemctl daemon-reload
sudo systemctl enable meu-app.service
sudo systemctl start meu-app.service
Depuração
journalctl -u meu-app.service -f
O que você construiu
Um serviço systemd que inicia o seu app Flask automaticamente em cada boot, reinicia em caso de travamento, e escreve logs no journal. O mesmo padrão funciona para qualquer processo de longa duração: apps FastAPI, workers, jobs em background.
Próximos passos
- Use
journalctl -u seu-servico.service -fpara ver logs em tempo real ao depurar problemas de inicialização. - Adicione um script HealthCheck à configuração do serviço para que o systemd possa reiniciá-lo se o app iniciar mas não estiver respondendo ao HTTP.
- Em produção, coloque o Nginx na frente do Flask e gerencie o Nginx como um serviço systemd separado.
Dúvidas ou feedback? Me encontre no LinkedIn ou GitHub.