Configurando um Aplicativo Django como Serviço Systemd no Ubuntu

Crie um arquivo de serviço em /etc/systemd/system/, por exemplo video_converter.service (substitua pelo nome relevante do seu projeto): ``` sudo nano /etc/systemd/system/video_converter.service


Insira o seguinet conteúdo — observe que não há comentários na linha de comando, nenhum operador `&` no final de `ExecStart`, e redirecionamentos de saída devem ser evitados ou tratados via `StandardOutput`/`StandardError`: ```
[Unit]
Description=Serviço de conversão de vídeos com FFmpeg e Django
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=deployer
Group=deployer
WorkingDirectory=/opt/video_processor
Environment="PATH=/opt/video_processor/.venv/bin"
ExecStart=/opt/video_processor/.venv/bin/python /opt/video_processor/manage.py runserver 0.0.0.0:8001
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

Notas importantes:

  • O usuário deployer deve existir e ter permissões adequadas sobre os diretórios e arquivos do projeto.
  • Type=simple indica que o processo principal é iniciado diretamente — ideal para aplicações Python que não fazem fork.
  • Restart=on-failure reinicia apenas em falhas reais (não em desligamentos planejados), aumentando a estabilidade.
  • A variável Environment garante que o PATH correto seja usado, evitando dependências externas acidentais.

2. Recarregar a configuração do systemd

Após salvar o arquivo, atualize o daemon para reconhecer a nova unidade: ``` sudo systemctl daemon-reload


### 3. Ativar e iniciar o serviço

Habilite o serviço para inicialização automática e inicie-o imediatamente: ```
sudo systemctl enable video_converter.service
sudo systemctl start video_converter.service

4. Verificar o estado e logs

Confirme se o serviço está ativo e examine possíveis mensagens de erro: ``` sudo systemctl status video_converter.service sudo journalctl -u video_converter.service -f --since "1 hour ago"


A saída de `status` deve exibir `active (running)` e mostrar o PID do processo Python. Os logs são centralizados no journal do systemd — sem necessidade de arquivos .log externos. ### 5. Gerenciamento adicional (opcional)

Para interromper ou desabilitar o serviço posteriormente: ```
sudo systemctl stop video_converter.service
sudo systemctl disable video_converter.service

Essa abordagem oferece controle robusto, integração nativa com o sistema, monitoramento em tempo real e conformidade com as melhores práticas de segurança e manutenção em ambientes de produção.

Tags: Django systemd Ubuntu linux-services Python

Publicado em 9-5 14:26