Inserisci qui la tua pubblicità

Riavviare servizi su server ubuntu automaticamente

riavvio automatico server

Se hai un'app Django con Gunicorn e il servizio si blocca inaspettatamente, ci sono diverse soluzioni che puoi adottare per rilevare e mitigare il problema. Ecco alcune opzioni:


1. Configurare Gunicorn come Servizio di Systemd

Se Gunicorn non è già configurato come servizio di systemd, fallo. Questo ti consente di utilizzare funzionalità come il riavvio automatico. Ecco un esempio di file di servizio:

sudo nano /etc/systemd/system/gunicorn.service

Contenuto del file:

[Unit] 
Description=Gunicorn instance to serve Django After=network.target 

[Service] 
User=youruser 
Group=yourgroup 
WorkingDirectory=/path/to/your/django/project 
ExecStart=/path/to/your/venv/bin/gunicorn --workers 3 --bind unix:/path/to/your/django/project.sock your_project.wsgi:application 

Restart=always 
RestartSec=3 
Environment="PATH=/path/to/your/venv/bin" 

[Install] 
WantedBy=multi-user.target
  • Chiave importante: Restart=always fa sì che il servizio venga riavviato automaticamente se si arresta.

Poi attiva e avvia il servizio:

sudo systemctl enable gunicorn sudo systemctl start gunicorn

2. Usare un Processo Supervisor

Strumenti come Supervisor o systemd possono monitorare Gunicorn e riavviarlo automaticamente in caso di arresto.

Per installare Supervisor:

sudo apt update sudo apt install supervisor

Configurare Gunicorn in Supervisor:

sudo nano /etc/supervisor/conf.d/gunicorn.conf

Contenuto del file:

[program:gunicorn] 

command=/path/to/your/venv/bin/gunicorn --workers 3 --bind unix:/path/to/your/django/project.sock your_project.wsgi:application directory=/path/to/your/django/project user=youruser 

autostart=true 
autorestart=true 
stderr_logfile=/var/log/gunicorn.err.log 
stdout_logfile=/var/log/gunicorn.out.log

Riavvia Supervisor:


 

bash

CopiaModifica

sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start gunicorn


3. Configurare un Health Check con un Monitor

Puoi impostare un health check per il sito web e monitorarlo con uno strumento come:

  • UptimeRobot (cloud-based)
  • Nagios (on-premises)
  • Prometheus con Alertmanager (monitoraggio avanzato)

Ad esempio, un health check periodico potrebbe verificare se l'URL del tuo sito è raggiungibile.

Esempio di script semplice:

Crea uno script in /usr/local/bin/check_gunicorn.sh:

#!/bin/bash 

if ! curl -s --head http://127.0.0.1 | grep "200 OK" > /dev/null; then echo "Gunicorn down! Restarting..." systemctl restart gunicorn  fi

Rendi lo script eseguibile:

chmod +x /usr/local/bin/check_gunicorn.sh

E pianifica un cron job per eseguirlo ogni minuto:

crontab -e

Aggiungi:

* * * * * /usr/local/bin/check_gunicorn.sh

4. Gestire il Carico con un Reverse Proxy (Nginx o Apache)

Se usi Nginx come reverse proxy, puoi configurare un comportamento di fallback per gestire il carico e ridurre i downtime:

Configurazione di Nginx:

Aggiungi una direttiva per verificare se il socket di Gunicorn è attivo:

nginx

server { 
  listen 80;  
  server_name yourdomain.com; 
  location / { 
    proxy_pass http://unix:/path/to/your/django/project.sock; 
    proxy_read_timeout 60s; 
    proxy_connect_timeout 60s; 
    error_page 502 = @fallback; 
  } 
  location @fallback { 
    return 503; 
  } 
}

 

Riavvia Nginx:

sudo systemctl restart nginx

5. Abilitare il Logging e il Debug

Analizzare i log può aiutarti a identificare il problema.

  • Gunicorn:
    journalctl -u gunicorn

     

  • Nginx (se usato):
    sudo tail -f /var/log/nginx/error.log

     


6. Scalare con un Load Balancer

Se il sito ha molto traffico, considera di scalare Gunicorn con più worker o bilanciando il carico su più server. Configura Gunicorn con più worker:

gunicorn --workers 4 --bind unix:/path/to/your/project.sock your_project.wsgi:application

7. Usare una Soluzione Cloud

Piattaforme come AWS Elastic Beanstalk, Google Cloud Run, o Heroku possono gestire automaticamente la disponibilità e il riavvio delle tue applicazioni.


Hai già una configurazione particolare o preferiresti implementare uno dei metodi sopra? 😊

barone.anto1@gmail.com

Iscriviti alla nostra newsletter

Iscriviti alla nostra newsletter per non perderti nessuna novità!

Il tuo indirizzo email