Problema: Esecuzione di Script Python Dopo la Disconnessione SSH
L'esecuzione di script Python su un server remoto può interrompersi quando la connessione SSH si chiude. Questo problema impedisce agli script a lunga durata di completare i loro compiti. È necessario un modo per mantenere gli script Python in esecuzione in background dopo la disconnessione da una sessione SSH.
Soluzione: Utilizzo del Comando nohup
Cos'è nohup?
Il comando nohup, abbreviazione di "no hangup", è uno strumento che permette di eseguire processi che continuano a funzionare anche dopo la disconnessione da una shell. Impedisce al sistema di inviare il segnale di interruzione (SIGHUP) al processo in esecuzione quando il terminale si chiude. Questo segnale solitamente termina i processi collegati al terminale chiuso.
Implementazione di nohup con script Python
Per utilizzare nohup con il tuo script Python:
- Apri il terminale o la sessione SSH.
- Vai alla directory contenente il tuo script Python.
-
Esegui questo comando:
nohup python bgservice.py &
L'e commerciale (&) alla fine del comando dice al sistema di eseguire il processo in background. Questo ti permette di utilizzare il terminale per altri compiti mentre il tuo script è in esecuzione.
Suggerimento: Verifica dei Processi in Esecuzione
Per verificare se il tuo processo nohup è in esecuzione, usa il comando 'ps':
ps aux | grep python
Questo mostrerà tutti i processi Python in esecuzione, incluso il tuo comando nohup.
Gestione dell'output con nohup
Per impostazione predefinita, nohup invia l'output del comando a un file chiamato "nohup.out" nella directory corrente. Se vuoi utilizzare un file di output personalizzato, puoi modificare il comando in questo modo:
nohup python bgservice.py > output_personalizzato.log 2>&1 &
Questo comando invia sia l'output standard che l'errore standard al file "output_personalizzato.log".
Metodi Alternativi per l'Esecuzione in Background
Screen: Un Multiplexer di Terminale
Screen è un multiplexer di terminale che ti permette di eseguire più sessioni di terminale in una finestra. Aiuta a mantenere i processi in esecuzione dopo la disconnessione da una sessione SSH.
Per utilizzare Screen con il tuo script Python:
-
Avvia una nuova sessione Screen:
screen -S mio_script_python -
Esegui il tuo script Python:
python bgservice.py -
Staccati dalla sessione Screen premendo Ctrl+A, poi D.
Per ricollegarti alla sessione in seguito, usa:
screen -r mio_script_python
Suggerimento: Gestione di Più Sessioni Screen
Per gestire più sessioni Screen, usa il comando screen -ls per elencare tutte le sessioni attive. Questo ti permette di vedere quali sessioni sono in esecuzione e i loro nomi, facilitando il passaggio tra diversi processi in background.
Tmux: Alternativa al Multiplexer di Terminale
Tmux è un altro multiplexer di terminale simile a Screen. Ha più funzionalità ed è spesso considerato più facile da usare.
Per utilizzare Tmux con il tuo script Python:
-
Avvia una nuova sessione Tmux:
tmux new -s mio_script_python -
Esegui il tuo script Python:
python bgservice.py -
Staccati dalla sessione Tmux premendo Ctrl+B, poi D.
Per ricollegarti alla sessione in seguito, usa:
tmux attach -t mio_script_python
Rispetto a Screen, Tmux offre:
- Migliore gestione delle finestre
- Più opzioni di personalizzazione
- Configurazione più semplice della barra di stato
Sia Screen che Tmux sono buone opzioni per mantenere gli script Python in esecuzione in background. La scelta tra i due spesso dipende dalle preferenze personali.
Strumenti di Gestione dei Processi
Supervisor: Un Sistema di Controllo dei Processi
Supervisor è un sistema di controllo dei processi per sistemi operativi Unix-like. Gestisce script Python a lunga durata. Supervisor avvia, ferma e monitora i processi, e può riavviarli in caso di crash.
Vantaggi dell'uso di Supervisor per script Python:
- Riavvio automatico in caso di crash
- Gestione dei processi tramite interfaccia web o linea di comando
- Logging dell'output dei processi
- Raggruppamento dei processi per la gestione
Configurazione di base per Supervisor:
-
Installa Supervisor:
sudo apt-get install supervisor -
Crea un file di configurazione per il tuo script Python:
sudo nano /etc/supervisor/conf.d/bgservice.conf -
Aggiungi il seguente contenuto al file:
[program:bgservice] command=python /percorso/verso/bgservice.py directory=/percorso/verso/directory/script autostart=true autorestart=true stderr_logfile=/var/log/bgservice.err.log stdout_logfile=/var/log/bgservice.out.log -
Ricarica Supervisor e avvia il tuo programma:
sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start bgservice
Suggerimento: Configurazione delle Variabili d'Ambiente
Per impostare variabili d'ambiente per il tuo script Python in Supervisor, aggiungi la seguente riga al tuo file di configurazione:
environment=VAR_AMB1="valore1",VAR_AMB2="valore2"
Questo ti permette di passare opzioni di configurazione al tuo script senza modificare il codice.
systemd: Gestore di Sistema e Servizi
systemd è un gestore di sistema e servizi per sistemi operativi Linux. Gestisce gli script Python come servizi di sistema.
Utilizzo di systemd per la gestione degli script Python:
-
Crea un file di servizio:
sudo nano /etc/systemd/system/bgservice.service -
Aggiungi il seguente contenuto:
[Unit] Description=Script Python Servizio in Background After=network.target [Service] ExecStart=/usr/bin/python3 /percorso/verso/bgservice.py Restart=always User=tuoutente [Install] WantedBy=multi-user.target -
Ricarica systemd, abilita e avvia il servizio:
sudo systemctl daemon-reload sudo systemctl enable bgservice.service sudo systemctl start bgservice.service
Per gestire il tuo servizio systemd:
- Controlla lo stato:
sudo systemctl status bgservice.service - Ferma il servizio:
sudo systemctl stop bgservice.service - Riavvia il servizio:
sudo systemctl restart bgservice.service
Supervisor e systemd offrono soluzioni per la gestione di script Python a lunga durata. systemd è più integrato nei sistemi Linux moderni, mentre Supervisor si concentra sulla gestione dei processi.





